1

Apple が提供する IKImageDemo を見ています。回転ラウンド スライダーは、FirstResponder の setRotation: メソッドにリンクされています。ただし、プロジェクト内のどのオブジェクトにもそのようなメソッドがないように見えますが、コードは機能します。

これを自分のプロジェクトにコピーしようとしていますが、MY FirstResponder には setRotation: メソッドがないため、どこにあるのかわかりません。Googleは役に立たなかった...

ありがとう。

4

3 に答える 3

1

アプリのファーストレスポンダーは、たまたま IKImageView のインスタンスです。IKImageView は setRotation: セレクターに応答します (これは、respondsToSelector:@selector(setRotation:) を IKImageView の任意のインスタンスに渡すことで確認できます)。

于 2010-01-21T22:27:34.890 に答える
0

First Responder メソッドは魔法ではありません。メッセージがファーストレスポンダーに送信されると、アプリの現在のファーストレスポンダー (通常はフォーカスされたビュー/コントロール) に、メソッドを実装するかどうかが尋ねられます。存在する場合、メソッドが呼び出されます。そうでない場合は、チェーンの次のレスポンダーが尋ねられ、トップレベル (NSApplicationインスタンス) に到達するまで続きます。オブジェクトは、呼び出されるメソッドを実際に実装する必要があり、単に宣言することはできません。

この場合、プライベート メソッドとしてIKImageView実装します。-setRotation:これは、メソッドが存在することを意味します (これが、IKImageView がファーストレスポンダに送信されたメッセージを受け入れる理由です) が、その使用は文書化またはサポートされていません。Apple がプライベート メソッドを使用してサンプルを出荷するのは奇妙に思えますが、そのとおりです。メソッドの使用がサポートされているときに、メソッドが誤ってパブリック ヘッダーから除外されることは確かにありますが、一般的には、Apple の担当者からプライベート メソッドを使用してもよいという特別な指示がない限り、プライベート メソッドを使用しない方が賢明です。

class-dumpを使用して、プライベート メソッドを含む、Objective-C オブジェクトのすべてのメソッドのヘッダーをバイナリから生成できます。

IKImageView-setRotationAngle:回転を変更したい場合は、おそらくこれが良い方法です。

于 2010-01-22T05:28:58.057 に答える