У меня бесконечно циклический CABasicAnimation
повторяющегося фрагмента изображения в моем представлении:
a = [CABasicAnimation animationWithKeyPath:@"position"];
a.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionLinear];
a.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
a.toValue = [NSValue valueWithCGPoint:CGPointMake(image.size.width, 0)];
a.repeatCount = HUGE_VALF;
a.duration = 15.0;
[a retain];
Я попытался "приостановить и возобновить" анимацию слоя, как описано в Technical Q & A QA1673.
Когда приложение входит в фон, анимация удаляется из слоя.
Чтобы компенсировать, я слушаю UIApplicationDidEnterBackgroundNotification
и вызываю stopAnimation
и в ответ на UIApplicationWillEnterForegroundNotification
вызов startAnimation
.
- (void)startAnimation
{
if ([[self.layer animationKeys] count] == 0)
[self.layer addAnimation:a forKey:@"position"];
CFTimeInterval pausedTime = [self.layer timeOffset];
self.layer.speed = 1.0;
self.layer.timeOffset = 0.0;
self.layer.beginTime = 0.0;
CFTimeInterval timeSincePause =
[self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
self.layer.beginTime = timeSincePause;
}
- (void)stopAnimation
{
CFTimeInterval pausedTime =
[self.layer convertTime:CACurrentMediaTime() fromLayer:nil];
self.layer.speed = 0.0;
self.layer.timeOffset = pausedTime;
}
Проблема заключается в том, что она начинается снова в начале и происходит уродливый переход из последней позиции, как видно из моментального снимка приложения, которое принимала система, когда приложение действительно вводило фон, обратно в начало цикла анимации.
Я не могу понять, как заставить его начинать в последней позиции, когда я снова добавляю анимацию. Честно говоря, я просто не понимаю, как работает этот код из QA1673: в resumeLayer
он дважды устанавливает layer.beginTime, что кажется излишним. Но когда я удалил первый набор-ноль, он не возобновил анимацию, где она была приостановлена. Это было протестировано с помощью простого распознавателя жестов, который переключил анимацию - это не связано с моими проблемами при восстановлении с фона.
В каком состоянии следует помнить, прежде чем удалять анимацию и как восстановить анимацию из этого состояния, когда я снова ее добавлю?