从Apple的Core Animation Programming Guide,列出4:

...
// create the filter and set its default values
CIFilter *filter = [CIFilter filterWithName:@"CIBloom"];
[filter setDefaults];
[filter setValue:[NSNumber numberWithFloat:5.0] forKey:@"inputRadius"];

// name the filter so we can use the keypath to animate the inputIntensity
// attribute of the filter
[filter setName:@"pulseFilter"];
...


在[filter setName ...”行上,我得到一个“ CIFilter没有可见的@interface声明选择器'setName:'。

我看到过滤器是使用filterWithName初始化器创建的,因此我怀疑其名称是只读的。但是,为什么在苹果代码以及我发现的许多其他示例中都出现了这个示例?

最佳答案

可写的name属性通过仅在Mac上存在的Core Animation additions类别添加。请参见CIFilter Animatable Properties subsection


  Core Animation将以下动画属性添加到Core
  图片的CIFilter类。有关更多信息,请参见CIFilter核心动画添加。
  信息。这些属性仅在OS X上可用。
  
  
  名称
  已启用
  


iOS上的CIFilter确实具有-name方法,但这仅用于对过滤器名称的只读访问,并且没有匹配的设置器。

上面链接到的《 Core Animation编程指南》中的该部分是从该指南的原始Mac版本复制并粘贴的,应进行更改,因为它并不完全适用于iOS。

10-05 20:20