3

委托是我的视图控制器。

我通过以下方式设置代表:

CABasicAnimation theAnimation;
theAnimation.delegate = self;

然后我配置动画并将动画添加到图层,并验证它在设备上正确动画。

但是,我无法调用此委托方法:

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
    NSLog(@"animationDidStop called.");
}

有任何想法吗?

此外,我在任何地方都找不到我的视图控制器为CAAnimation委托方法采用的协议。我认为所有委托对象都必须采用协议?

谢谢!

4

1 回答 1

2

此外,我在任何地方都找不到我的视图控制器为 CAAnimation 委托方法采用的协议。我认为所有委托对象都必须采用协议?

委托和形式化协议是正交的概念:
形式化协议是 Objective-C 编程语言的新成员——事实上,它们是在CoreAnimation(née LayerKit)之后引入的。

在引入之前的做事方式@protocol——而且这种方式QuartzCore仍然有效——将一个类别声明NSObject为所谓的“非正式协议”。直到最近,Apple 才开始将这些正式化——参见NSURLConnection这样的示例,它在当前版本的 iOS/OS X 中获得了它的委托协议。

在简要介绍历史之后,现在解决您的问题:

如果您展示的是您的代码的逐字副本,那么这是行不通的。事实上,如果你不使用 ARC,那么你很幸运上面的代码不会因为EXC_BAD_ACCESS. 在尝试向其发送消息之前,您应该完全将值设置animation为有意义的东西......

于 2011-12-26T22:08:22.387 回答