Ios 在图层上设置初始仿射变换,然后设置累积变换的动画?
我在iOS上使用QuartzCore制作了一个时钟动画。每个时钟指针都是一个Ios 在图层上设置初始仿射变换,然后设置累积变换的动画?,ios,objective-c,core-animation,Ios,Objective C,Core Animation,我在iOS上使用QuartzCore制作了一个时钟动画。每个时钟指针都是一个ui视图当前,我将秒针放置在12点钟位置,并将秒针视图的定位点设置为0.5、1.0,以便它围绕其底部(而不是中心点)旋转。然后,我将以下动画添加到该层: (注意,这使用了CAKeyFrameAnimation上的一个类别来启用自定义放松功能,但它超出了问题的范围。出于所有目的和目的,动画的行为与常规的CABasicAnimation) 这与预期完全一样,但是,秒针始终在时钟面上的12点钟开始。我想从一个任意的位置开始。例
ui视图
当前,我将秒针放置在12点钟位置,并将秒针视图的定位点设置为0.5、1.0,以便它围绕其底部(而不是中心点)旋转。然后,我将以下动画添加到该层:
(注意,这使用了CAKeyFrameAnimation上的一个类别来启用自定义放松功能,但它超出了问题的范围。出于所有目的和目的,动画的行为与常规的CABasicAnimation
)
这与预期完全一样,但是,秒针始终在时钟面上的12点钟开始。我想从一个任意的位置开始。例如,如果“秒”的当前值为30秒,我希望在显示时钟并开始设置动画之前将秒针旋转180度
我尝试过添加(在动画之前):
但这会导致秒针每秒在时钟面上随机跳动一次。我尝试将fromValue
设置为initialMinuteHandTransform
值,和/或尝试将toValue
更改为initialMinuteHandTransform
+sixtdegreesofradians
,但我的动作仍然不稳定
如何在任意位置启动“二手”,并以每秒6度旋转(时钟面上的每秒)的方式无限期地设置动画?您缺少“加法”属性。它将动画配置为将动画值添加到现有值(相对动画) 这样,动画将从当前旋转开始
如果您要使用
CABasicAnimation
,您可以使用byValue
属性,而不是toValue
和fromValue
我看不出您是如何推导时间分量的。。。但是你试过把它们记录下来吗?您也可以尝试只运行mod 60到度到弧度的方法。。。我不知道这有什么关系。时间只是系统时钟的实时时间。因此,用户可能会运行我的应用程序,时间可能是11:30:45或11:20:16。关键是,第二只手可能需要从任何地方开始,所以我需要将其变换/旋转到该旋转角度,然后设置动画。这就是我遇到麻烦的地方。当我应用变换,然后尝试设置动画时,“手”不规则地围绕时钟面跳跃。目前只有在动画开始时没有对层应用任何变换时,它才能正常工作。就是这样!我把加法和累加混淆了。非常感谢。
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"];
float initialSecondHandTransform= degreesToRadians(currentTimeComponents.second * 6);
[secondHand setTransform:CGAffineTransformMakeRotation(initialSecondHandTransform)];
secondHandRotation.additive = YES;