我已经在这里(以及整个网络)查看了其他答案,看到了像我这样的情况并且尚未解决问题。基本上正在发生的是我在二次贝塞尔曲线上为包含图像的CALayer制作动画。动画效果很好,但我真的需要实现动画后的行为,而我这样做的每一次尝试都失败了。这是我的代码:
UIBezierPath *path1 = [UIBezierPath bezierPath];
[path1 moveToPoint:P(67, 301)];
[path1 addQuadCurveToPoint:P(254, 301) controlPoint:P(160, 93)];
CALayer *ball1 = [CALayer layer];
ball1.bounds = CGRectMake(67, 301, 16.0, 16.0);
ball1.position = P(67, 301);
ball1.contents = (id)([UIImage imageNamed:@"turqouiseBallImage.png"].CGImage);
[self.view.layer addSublayer:ball1];
CAKeyframeAnimation *animation1 = [CAKeyframeAnimation animationWithKeyPath:@"position"];
animation1.path = path1.CGPath;
animation1.rotationMode = kCAAnimationRotateAuto;
animation1.repeatCount = 2.0;
animation1.duration = 5.0;
[ball1 addAnimation:animation1 forKey:@"ball1"];
[animation1 setDelegate:self];
我正在尝试将动画的委托设置为self(我的主视图控制器;这都在viewDidLoad中),其代码实现了animationDidStop方法:
(interface) (only showing relevant code)
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag;
(implementation)
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag; {
NSLog(@"animation did stop");
}
我看不出我在做什么导致该方法不被调用。根据我的理解(我认为是iOS编程的新手),CAKeyFrameAnimation animation1会在动画停止动画时自动将animationDidStop方法发送到指定的委托,这正是我无法识别问题的原因。
我见过的所有其他解决方案或替代方案都没有使用或建议使用块动画,我找不到在bezier曲线上制作动画的方法。
答案 0 :(得分:1)
在调用-[CALayer addAnimation:forKey:]
之前设置动画的委托。
请注意CALayer.h
中的评论:
动画在被添加到图层之前被复制,所以任何
对anim
的后续修改将不会产生任何影响,除非它是 添加到另一层。