Анимация часов с помощью Core Animation / CALayers - PullRequest
2 голосов
/ 20 июля 2011

У меня есть UIViewControler с 4 слоями.

  1. Лицевая панель часов / часов
  2. Секундная стрелка
  3. Минутная стрелка
  4. Часовая стрелка

IПолучил каждую руку, чтобы начать движение по нагрузке в нужное время (определяя углы на окружности в зависимости от времени загрузки приложения).

Как правильно определить движение и продолжительность движения (должно быть до бесконечности), используя методы доступа 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"];

, где sAlpha это угол как функция времени.secondHandMotion.toValue утверждение неверно, я знаю это.Как мне сказать, чтобы он продолжал двигаться и с правильным интервалом в 1 секунду?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 20 июля 2011

Когда я реализовал это в одном из моих приложений, я начал с этого урока

Аналоговые часы с кварцевым сердечником битая ссылка

См. Источник на Github.

Он пересчитывает каждую секунду, что может дать чуть более точные результаты, относящиеся к системным часам.

То, как я реализовал вращение, было примерно таким (это анимационная часть, вам все еще нужны вычисления углов, которые вы делали ранее).

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];

ПРИМЕЧАНИЕ: я написал это очень рано в моем обучении iOS, так что это может быть немного ужасно.

1 голос
/ 29 октября 2012

Посмотрите на PSAnalogClockView . Это хорошо решает вашу проблему многократно.

...