gpt4 book ai didi

ios - CAKeyframeAnimation 在贝塞尔曲线后不调用animationDidStop (iOS)

转载 作者:行者123 更新时间:2023-11-29 03:04:51 25 4
gpt4 key购买 nike

我已经查看了此处(以及网络上)针对像我这样的情况的所有其他答案,但尚未解决该问题。本质上发生的是我在二次贝塞尔曲线上为包含图像的 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];

我正在尝试将动画的委托(delegate)设置为自己(我的主视图 Controller ;这都在 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 方法发送到其指定的委托(delegate),这正是我无法确定问题的原因。

我见过的所有其他解决方案或替代方案要么无效,要么建议使用 block 动画,为此我找不到在贝塞尔曲线上制作动画的方法。

最佳答案

在调用 -[CALayer addAnimation:forKey:] 之前设置动画的委托(delegate)。

注意CALayer.h中的注释:

The animation is copied before being added to the layer, so any
subsequent modifications to anim will have no affect unless it is added to another layer.

关于ios - CAKeyframeAnimation 在贝塞尔曲线后不调用animationDidStop (iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22902328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com