0

来自 Apple 的核心动画编程指南,清单 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 初始化程序创建的,所以我怀疑它的名称是只读的。但是,为什么这个示例出现在 Apple 的代码中,以及我发现的许多其他示例中?

4

2 回答 2

3

writeablename属性是通过仅在 Mac 上存在的核心动画添加类别添加的。请参阅CIFilter 动画属性小节

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

  • 姓名
  • 启用

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

That section of the Core Animation Programming Guide that you link to above was copied and pasted from the original Mac version of the guide, and should be altered because it doesn't entirely apply to iOS.

于 2012-08-04T21:12:18.870 回答
0

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

如果您需要对象的键路径,则将其存储在类的属性中,然后您可以通过 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);

"

于 2012-08-04T17:53:39.803 回答