太阳在短短10个小时内就能过去

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.

时钟的屏幕截图,每个虚拟日两次,到达四个时钟小时.

因此,假设两个动画具有相同的持续时间,或者时钟动画的持续时间是太阳动画的偶数倍,为什么时钟需要更长时间?

就此而言,虽然我没有抱怨,为什么太阳等待时钟赶上?

Rob*_*Rix 7

这似乎是因为您没有为keyTimes关键帧动画的属性指定值.根据文件:

为获得最佳结果,数组中元素的数量应与values属性中的元素数或path属性中的控制点数相匹配.如果他们不这样做,动画的时间可能不是你所期望的.

事实上,设置keyTimes@[ @0, @0.25, @0.5, @0.75, @1 ]似乎更正.