0

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... の行で、「No visible @interface for 'CIFilter' はセレクター 'setName:' を宣言しています。

filterWithName 初期化子を使用してフィルターが作成されていることがわかります。そのため、その名前は読み取り専用であると思われます。しかし、なぜこの例がAppleのコードや、私が見つけた他の多くの例にあるのでしょうか?

4

2 に答える 2

3

書き込み可能なプロパティは、Mac にのみ存在するコア アニメーションの追加nameのカテゴリを介して追加されます。CIFilterのアニメーション化可能なプロパティのサブセクションを参照してください。

Core Animation は、次のアニメート可能なプロパティを Core Image の CIFilter クラスに追加します。詳細については、CIFilter コア アニメーションの追加を参照してください。これらのプロパティは、OS X でのみ使用できます。

  • 名前
  • 有効

iOS の CIFilter には-nameメソッドがありますが、それはフィルター名への読み取り専用アクセス専用であり、一致するセッターはありません。

上記にリンクしている Core Animation Programming Guide のそのセクションは、元の Mac バージョンのガイドからコピーして貼り付けたものであり、iOS に完全に適用されるわけではないため、変更する必要があります。

于 2012-08-04T21:12:18.870 に答える
0

率直に言って、CIFilter の名前を変更しようとする例を見たことがありません。filterWithName から得られるものは、高度に特殊化されたオブジェクトです。クラスのドキュメントを見ると、名前を返すメソッド「name」が示されていますが、読み書き可能なプロパティはありません。

オブジェクトへのキーパスが必要な場合は、それをクラスのプロパティに保存すると、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

iOS5.1 の CIFilter.h を調べる:

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

"

于 2012-08-04T17:53:39.803 に答える