2010-01-21 93 views
1

我正在查看Apple提供的IKImageDemo,將旋轉圓滑塊鏈接到FirstResponder中的setRotation:方法。然而,該項目中的任何對象似乎都沒有這樣的方法,但代碼工作。FirstResponder方法從哪裏來?

我想把它複製到我自己的項目中,而我的FirstResponder沒有setRotation:方法,所以我不確定它的位置。谷歌一直沒有幫助...

謝謝。

+0

我不知道爲什麼,但我覺得不得不對我自己的問題發表評論:「當一個媽媽迴應者和一個爸爸迴應者彼此相愛VERRY很.......」好吧,我很高興我從我的系統中解脫出來。 – 2010-01-21 21:14:17

+0

你能提供一個鏈接到IKImageDemo嗎?我無法在我的機器上找到它,並且無法通過在線示例找到它。 – 2010-01-21 21:52:00

+0

http://developer.apple.com/mac/library/samplecode/IKImageViewDemo/ – 2010-01-21 21:56:48

回答

1

那麼,應用程序中的第一響應者恰好是IKImageView的一個實例。 IKImageView響應setRotation:選擇器(可以通過傳遞respondsToSelector:@selector(setRotation :)給IKImageView的任何實例來看),儘管我找不到它在哪裏提到setRotation:方法

0

第一響應者方法aren沒有魔法。當消息發送給第一響應者時,會發生什麼情況是應用程序當前的第一響應者(通常是焦點視圖/控件)被詢問是否實現該方法。如果是,則調用該方法。如果沒有,則會詢問鏈上的下一個響應者,並繼續等到頂層(NSApplication實例)到達。該對象必須實際實現該方法才能被調用,它不能只聲明它。

在這種情況下,IKImageView實現了-setRotation:作爲私有方法。這意味着該方法存在(這就是IKImageView接受發送給First Responder的消息的原因),但它的使用沒有記錄或支持。看起來很奇怪,蘋果會用一種私人方法發佈一個例子,但你去了。肯定的情況是,有時方法會在支持使用方法時被意外地排除在公共標題之外,但避免使用私有方法通常是明智的,除非Apple的某個人專門告訴您可以使用方法。

可以使用class-dump.

IKImageView生成一個Objective-C對象的所有方法,包括私有方法頭,從二進制有一個公共的方法-setRotationAngle:這可能是去,如果你想改變的方式迴轉。

+0

如果它不在列表中顯示,我如何在IB中鏈接到它? setRotationAngle不會出現在要鏈接的事物列表中,可能是因爲它不是一個正常的函數,它是一個來自rotationAngle屬性的魔法設置器?當我將(圓形)滑塊鏈接到類似的方法時,它會自動將滑塊的值插入方法中? – 2010-01-22 14:52:47

+0

此外,爲什麼在演示中的第一響應者中,除了正常的「系統定義」之外,還有一系列在「MainMenu.nib」下列出的方法?我的項目沒有任何這些,我不知道如何製作它們,或者如何將它們指向實際代碼...... – 2010-01-22 14:58:32

0

我找到了解決這個煩惱的方法。即使在最初的Apple示例中,一旦在First Responder中刪除了setRotation的綁定,就不能放回,除非這樣做:只需使用Attribute Inspector作爲First Responder並添加一個User Defined action「setRotation:」鍵入「id」。現在,即使是FirstRender綁定setRotation中的黃色三角形:在Apple示例中消失了,它也出現在我自己的IKImageView實例中。