gpt4 book ai didi

ios - 核心动画 - 未调用 animationDidStop

转载 作者:可可西里 更新时间:2023-11-01 06:23:00 26 4
gpt4 key购买 nike

那里。

在 iOS 应用中,核心动画回调不起作用。

- (void)startAnim {
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
anim.fromValue = startAngle;
anim.toValue = endAngle;
anim.duration = 2;
anim.delegate = self;

[self.target addAnimation:anim forKey:nil]; // self.target is CALayer instance, it's sublayer of Custom UIView
}

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
[self.target setValue:@(endAngle) forKeyPath:@"transform.rotation.z"];
}

但是 animationDidStop 永远不会被调用。如果我像下面这样更改代码,将调用完成阻止。

- (void)startAnim {
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
anim.fromValue = startAngle;
anim.toValue = endAngle;
anim.duration = 2;
anim.delegate = self;

[CATransaction begin];
[CATransaction setCompletionBlock:^{
[self.target setValue:@(endAngle) forKeyPath:@"transform.rotation.z"];
}];

[self.target addAnimation:anim forKey:nil];
[CATransaction commit];
}

但我不想使用 CATransaction。为什么不调用 animationDidStop?

更新:有一种方法可以像这样设置最终值

- (void)startAnim {
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
anim.fromValue = startAngle;
anim.toValue = endAngle;
anim.duration = 2;
anim.delegate = self;

[self.target setValue:@(endAngle) forKeyPath:@"transform.rotation.z"];
[self.target addAnimation:anim forKey:nil];
}

但是最后的赋值应该在动画结束的时候完成。因为layer有多个动态动画,所以不知道最终值。

最佳答案

我找到了没有调用 animationDidStop 的原因。

因为在其他线程的循环中添加了动画,

所以我固定如下。

- (void)startAnim {
dispatch_async(dispatch_get_main_queue(), ^{
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
anim.fromValue = startAngle;
anim.toValue = endAngle;
anim.duration = 2;
anim.delegate = self;

[self.target addAnimation:anim forKey:nil];
});
}

关于ios - 核心动画 - 未调用 animationDidStop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26572835/

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