Pet*_*sey 3 macos cocoa animation core-animation osx-lion
我正在编写一个玩具应用程序来试验一些核心动画功能,包括沿着路径动画(这是太阳运动进入的地方)和操纵时间.
https://github.com/boredzo/WatchCompass

(别介意还没有实现的按钮.)
太阳和表盘是CALayers,每个都包含静态图像.时针是表面图层中的CAShapeLayer,其锚点设置为一端((NSPoint){ 0.5, 1.0 }).
沿着路径使用CAKeyframeAnimation对太阳进行动画处理.椭圆显示路径; 你可以看出他们出于某种原因没有排队,但这是一个不同的问题.
transform.rotation.z使用CABasicAnimation动画时针,如本答案中所述.
问题 - 至少我在这个问题中要问的问题 - 是持续时间的差异.
两个动画都设置为完全相同的持续时间,但太阳在时针前两个时钟小时返回到其起始位置.
当然,最终时钟的持续时间恰好是太阳持续时间的一半(或其速度设置为2),因为时钟只有12小时.如果我这样做,那么时针落在太阳后面4个小时,而不是2.

因此,假设两个动画具有相同的持续时间,或者时钟动画的持续时间是太阳动画的偶数倍,为什么时钟需要更长时间?
就此而言,虽然我没有抱怨,为什么太阳等待时钟赶上?
这似乎是因为您没有为keyTimes关键帧动画的属性指定值.根据文件:
为获得最佳结果,数组中元素的数量应与values属性中的元素数或path属性中的控制点数相匹配.如果他们不这样做,动画的时间可能不是你所期望的.
事实上,设置keyTimes到@[ @0, @0.25, @0.5, @0.75, @1 ]似乎更正.