1

我正在查看 Apple 提供的 IKImageDemo,旋转圆形滑块链接到 FirstResponder 中的 setRotation: 方法。但是,项目中的所有对象似乎都没有这样的方法,但代码仍然有效。

我正在尝试将其复制到我自己的项目中,而我的 FirstResponder 没有 setRotation: 方法,所以我不确定它在哪里。谷歌一直没有帮助...

谢谢。

4

3 回答 3

1

好吧,应用程序中的第一响应者恰好是 IKImageView 的一个实例。IKImageView 响应 setRotation: 选择器(可以通过将 respondsToSelector:@selector(setRotation:) 传递给 IKImageView 的任何实例来查看),尽管我在文档中找不到它提到 setRotation: 方法的位置

于 2010-01-21T22:27:34.890 回答
0

急救人员方法并不神奇。当向第一响应者发送消息时,会询问应用程序的当前第一响应者(通常是焦点视图/控件)是否实现该方法。如果是,则调用该方法。如果没有,则询问链上的下一个响应者,依此类推,直到到达顶层(NSApplication实例)。对象必须实际实现要调用它的方法,它不能只是声明它。

在这种情况下,IKImageView实现-setRotation:为私有方法。这意味着该方法存在(这就是 IKImageView 接受发送给第一响应者的消息的原因)但它的使用没有记录或支持。Apple 会使用私有方法发布一个示例,这似乎很奇怪,但你去吧。肯定是这样的,有时方法在支持使用时会意外地被排除在公共标头之外,但是通常避免使用私有方法是明智的,除非 Apple 有人明确告诉您可以使用私有方法。

您可以使用class-dump从二进制文件中为 Objective-C 对象的所有方法(包括私有方法)生成标头。

IKImageView有一个公共方法-setRotationAngle:,如果你想改变轮换,这可能是要走的路。

于 2010-01-22T05:28:58.057 回答
0

我找到了解决这种烦恼的方法。即使在最初的 Apple 示例中,一旦您在 First Responder 中删除了 setRotation 的绑定,就无法将其放回原处,除非这样做:只需使用 First Responder 的 Attributes Inspector 并添加一个用户定义的操作“setRotation:”输入“身份证”。现在,即使是在 Apple 示例中为 setRotation: 绑定的 First Responder 绑定中的黄色三角形也消失了,它也出现在我自己的 IKImageView 实例中。

于 2013-04-10T14:26:48.893 回答