如何在iOS中使用CoreAnimation动画CIFilter?

4
我想使用CABasicAnimation给一个图层添加一个滤镜,并且我想要动画呈现这个滤镜的一些属性。从文档中了解到,filters属性是可动画的,但在同样的文档中,好像很难找到如何实现它的方法!
那么,如何使用animationWithKeyPath引用CABasicAnimation中的单个滤镜属性呢?
[CABasicAnimation animationWithKeyPath:@"filters._FILTER_._PROPERTY_"];

这是一个完整的示例,仅用于向您展示我如何尝试使其工作:

//Define the filter
CIFilter *filterOne = [CIFilter filterWithName:@"CISepiaTone"];
[filterOne setDefaults];

//Attach it to the Layer
self.layer.filters = [NSArray arrayWithObject:filterOne];

//HERE THE PROBLEM ---------------------------------------
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"filters.???????.inputIntensity"];
//EOF HERE THE PROBLEM -----------------------------------

//Define the Animation settings
animation.delegate = self;
animation.fromValue = [NSNumber numberWithInt:0];
animation.toValue = [NSNumber numberWithInt:1];
animation.duration = 0.3;
...etcetc...

你尝试过简单地使用@"filters.property"吗?如果数组中只有一个过滤器,这可能有效,因为setValue:forKeyPath将应用于数组的每个元素。对于多个过滤器没有想法... - amadour
@amadour,filters是一个NSArray。它不能像单个过滤器对象一样被引用。目前我是这样使用过滤器名称的:@"filters.CISepiaTone.inputIntensity",但我遇到了其他问题... - MatterGoal
1个回答

7
我认为在iOS中,图层过滤器属性根本不起作用。最近在苹果的站点上,苹果核心动画论坛进行了讨论,一位名为“Rincewind”的苹果工程师发布了该图层过滤器功能在iOS上根本没有实现。 文档中提到:
引用: iOS Note:虽然iOS中的CALayer类公开了filters属性, Core Image并不可用。目前此属性可用的过滤器未定义。
据我所知,您只能通过直接调用CI过滤器并获得CIImage作为输出来使用CI过滤器。然后,您必须通过代码使用CIImage。

1
从iOS 6.1开始,文档现在说:此属性不支持iOS中的图层。因此,文档已经赶上了CIFilters现在受支持的事实,但是您无法像在Mac OS中那样将过滤器附加到图层。 - Duncan C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接