gpt4 book ai didi

ios - 在图层上设置初始 AffineTransform,然后对累积变换进行动画处理?

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

我在 iOS 上使用 QuartzCore 制作了一个时钟动画。每个时钟指针都是一个 UIView 目前,我将秒针定位在 12 点钟并将秒针 View 的 anchor 设置为 0.5、1.0,以便它围绕其底部(而不是中心点)旋转。然后我将以下动画添加到图层中:

(注意,这使用 CAKeyFrameAnimation 上的类别来启用自定义缓动功能,但它超出了问题的范围。出于所有意图和目的,动画的行为就像常规的 CABasicAnimation)

CAKeyframeAnimation *secondHandRotation;
secondHandRotation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"
function:BounceEaseOut
fromValue:0
toValue:(sixDegreesOfRadians)];

secondHandRotation.duration = 1;
secondHandRotation.cumulative = YES;
secondHandRotation.repeatCount = 10000;

[secondHand.layer addAnimation:secondHandRotation forKey:@"rotationAnimation"];

这与预期完全一致,但是秒针始终从钟面上的 12 点钟开始。我想从任意位置开始。例如,如果“秒”的当前值为 30 秒,我想在显示时钟并开始设置动画之前将秒针旋转 180 度。

我尝试过添加(在动画之前):

float initialSecondHandTransform= degreesToRadians(currentTimeComponents.second * 6);
[secondHand setTransform:CGAffineTransformMakeRotation(initialSecondHandTransform)];

但这会导致秒针每秒在钟面上随机跳跃一次。我尝试将 fromValue 设置为 initialMinuteHandTransform 值,和/或尝试将 toValue 更改为 initialMinuteHandTransform + sixDegreesOfRadians 但我的运动仍然不稳定。

如何在任意位置启动 secondHand,并以每秒 6 度的旋转(钟面上的一秒)无限期地对其进行动画处理?

最佳答案

您缺少additive 属性。它配置动画以将动画值添加到现有值(相对动画)。

secondHandRotation.additive = YES;

这样动画将从当前旋转开始。

如果您使用CABasicAnimation,您可以使用byValue属性而不是toValuefromValue .

关于ios - 在图层上设置初始 AffineTransform,然后对累积变换进行动画处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17160063/

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