gpt4 book ai didi

iphone - 如何从停止位置开始 CAKeyframeAnimation

转载 作者:行者123 更新时间:2023-11-29 10:56:47 29 4
gpt4 key购买 nike

我正在使用 CAKeyframeAnimation 来制作旋转动画。我正在使用按钮触发图层上的动画。

我想从上一个动画停止弧度开始下一个旋转动画。我用kCAFillModeForwards设置了fillmode,但是停止弧度没有重置为原来的,但是当我开始下一个旋转动画时,动画总是从原来开始而不是从上一个停止开始状态。

有解决办法吗?

最佳答案

题主没看懂,是不是要旋转后一直保持角度,那第二次旋转是另一个动画?还是希望它无限期地旋转?

我打算两者兼顾。

保持角度

你想让它旋转一次,然后保持当前角度,然后再旋转一次?

嗯,您需要了解“模型层”和“表示层”是如何存在的。一旦表示层(removedOnCompletion)恢复到模型层,所以您可能想要做的是修改“模型层”以提供最终结果。

CALayer *layer = <#self.myview.layer#>;

CGFloat angle = M_PI_4;

// Get the new transform
CATransform3D transform = CATransform3DRotate(layer.transform, angle, 0, 0, 1);

// Apply the animation to the "presentation layer"
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];

animation.fromValue = [NSValue valueWithCATransform3D:layer.transform];
animation.toValue = [NSValue valueWithCATransform3D:transform];
animation.duration = 1.0;

animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards;

[layer addAnimation:animation forKey:@"spinme"];

// Apply the transform to the "model layer"
layer.transform = transform;

请注意,最后我设置了 layer.transform,这样当动画结束时,模型层与表示层同步。

无限旋转

您应该注意的两个关键属性是:

animation.cumulative = YES;
animation.repeatCount = HUGE_VALF;
  • Cumulative 使它,好吧.. 累积,将先前转换的结果相加。它不会恢复到原始状态。
  • 重复计数决定了它会旋转多少次,而 HUGE_VALF 基本上是表达无穷大的好方法。

另一方面,您可以避免使用cumulative,如果动画确实独立进行了一个完整的循环。例如下面的动画:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

animation.fromValue = @(0);
animation.toValue = @(2*M_PI);
animation.duration = 1.0;

animation.cumulative = NO;
animation.repeatCount = HUGE_VALF;
animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards;

不需要累积标志,因为它会旋转完整的 360º (2*pi),但重复计数仍然相关。完成时删除大部分是可选的,因为理论上,动画永远不会结束,只有当其他人删除它时才会结束。

你选择什么方法,这完全取决于你想要完成什么。

关于iphone - 如何从停止位置开始 CAKeyframeAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17938049/

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