使用核心动画/ CALayers动画时钟

Art*_*sev 2 core-animation objective-c nsdate calayer ios

我有一个4层的UIViewControler.

  1. 手表/时钟的面板
  2. 二手
  3. 分针
  4. 时针

我已经让每只手在正确的时间开始移动(通过根据应用程序加载的时间在圆上定义角度).

如何使用CABasicAnimation存取方法正确定义运动的运动和持续时间(应该是无限的)?

例如,我将我的secondHandMotion(它是一个实例化的CABasicAnimation对象)设置为与当前时间对应的时钟帧上的某个角度:

CABasicAnimation *secondHandMotion = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
secondHandMotion.fromValue = [NSNumber numberWithFloat:sAlpha];
secondHandMotion.toValue = [NSNumber numberWithFloat:(2*M_PI)];
[secondHand addAnimation:secondHandMotion forKey:@"transform"];
Run Code Online (Sandbox Code Playgroud)

sAlpha角度在哪里是时间的函数.的secondHandMotion.toValue说法是错误的,我知道.我怎么告诉它继续移动,并以正确的间隔,1秒钟滴答?

谢谢!

Pau*_*l.s 5

当我在我的一个应用程序中实现这一点时,我从本教程开始

模拟时钟使用Quartz Core 断链

请参阅Github上的Source.

它重新计算每一秒,这可能会给出与系统时钟相关的更准确的结果.

我实现旋转的方式是这样的(这是动画部分,你仍然需要你以前做过的角度计算).

CGAffineTransform transform = CGAffineTransformIdentity;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];

self.hourView.transform   = CGAffineTransformRotate(transform, hourAngle);
self.minView.transform    = CGAffineTransformRotate(transform, minutesAngle);
self.secondView.transform = CGAffineTransformRotate(transform, secondsAngle);

[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)

注意:我在iOS学习中很早就写了这个,所以它可能有点可怕.