CIFilter - 无法更改名称

时间:2012-08-04 17:37:06

标签: objective-c ios cocoa core-animation core-image

来自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 ... line上我得到一个“没有可见的@interface for'CIFilter'声明选择器'setName:'

我看到过滤器是使用filterWithName初始化程序创建的,所以我怀疑它的名称是只读的。但是,为什么这个例子在Apple的代码中,以及我发现的许多其他例子?

2 个答案:

答案 0 :(得分:3)

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

  

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

     
      
  • 名称
  •   
  • 启用
  •   

iOS上的CIFilter确实有-name方法,但这只是对过滤器名称的只读访问,并且没有匹配的setter。

您链接到上面的核心动画编程指南的那一部分是从指南的原始Mac版本中复制和粘贴的,应该进行修改,因为它并不完全适用于iOS。

答案 1 :(得分:0)

坦率地说,我从未见过尝试更改CIFilter名称的示例 - 您从filterWithName获得的是一个高度专业化的对象。如果查看类文档,它会显示一个返回名称的方法“name”,但不会显示readwrite属性。

如果需要对象的密钥路径,则将其存储在类的属性中,然后可以通过setValue访问它:... forKeyPath:@“myClass.myIvar。”

编辑:只是为了完全清楚:

Core Image was added in iOS 5. Also the statement in the answer is not correct. Look in the CIFilter class description "name
The name of the filter.

- (NSString *)name
Return Value
A string that holds the name of the filter.

Availability
Available in iOS 5.0 and later.
Declared In
CIFilter.h

在CIFilter.h中查找iOS5.1:

 "- (NSString*)name __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_5_0);