BezierPath анимация - PullRequest
       25

BezierPath анимация

1 голос
/ 30 декабря 2010

У меня есть кривая Безье, и я анимирую объект, чтобы двигаться по нему с помощью CAKeyFrameAnimation.Но, скажем, объект останавливается в некоторой точке кривой при обнаружении касания пользователя.Затем, нажав на кнопку, чтобы возобновить движение, объект должен двигаться по оставшемуся пути до конца.Как мне это сделать?

Если я добавлю путь к объекту CAKeyFrameAnimation, то при нажатии кнопки возобновления объект перемещается вправо от начала до конца пути.Не с того момента, когда он остановился.Я хочу, чтобы он продолжал двигаться только с той точки, с которой он остановился, и не начинал сначала.Есть ли способ оживить его вдоль пути от точки, в которой он останавливается?

1 Ответ

3 голосов
/ 04 января 2011

Все значения синхронизации основной анимации реализованы в протоколе CAMediaTiming.Одним из его свойств является speed, которое определяет время анимации для слоя относительно временного пространства его родительского слоя.Если для свойства speed установлено значение 0.0, анимация будет приостановлена.

Вам нужно немного подработать, чтобы убедиться, что анимация завершается правильно после перезапуска. Технические вопросы и ответы QA1673 в документации есть следующий пример кода, который должен работать для вас:

-(void)pauseLayer:(CALayer*)layer
{
  CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
  layer.speed = 0.0;
  layer.timeOffset = pausedTime;
}

-(void)resumeLayer:(CAlayer*)layer
{
  CFTimeInterval pausedTime = [layer timeOffset];
  layer.speed = 1.0;
  layer.timeOffset = 0.0;
  layer.beginTime = 0.0;
  CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
  layer.beginTime = timeSincePause;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...