2010-01-21 63 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实例中。