来自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的代码中,以及我发现的许多其他例子?
答案 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);
“