Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在图层上设置初始仿射变换,然后设置累积变换的动画?_Ios_Objective C_Core Animation - Fatal编程技术网

Ios 在图层上设置初始仿射变换,然后设置累积变换的动画?

Ios 在图层上设置初始仿射变换,然后设置累积变换的动画?,ios,objective-c,core-animation,Ios,Objective C,Core Animation,我在iOS上使用QuartzCore制作了一个时钟动画。每个时钟指针都是一个ui视图当前,我将秒针放置在12点钟位置,并将秒针视图的定位点设置为0.5、1.0,以便它围绕其底部(而不是中心点)旋转。然后,我将以下动画添加到该层: (注意,这使用了CAKeyFrameAnimation上的一个类别来启用自定义放松功能,但它超出了问题的范围。出于所有目的和目的,动画的行为与常规的CABasicAnimation) 这与预期完全一样,但是,秒针始终在时钟面上的12点钟开始。我想从一个任意的位置开始。例

我在iOS上使用QuartzCore制作了一个时钟动画。每个时钟指针都是一个
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;