У меня есть простая CABasicAnimation, запрограммированная как бесконечная анимация (у меня есть колесо, которое я постоянно вращаю). Вот метод, в котором я настраиваю эту явную анимацию:
-(void)perform360rotation:(UIImageView*) imageView {
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
// to rotate around a specific axis, specify it in the KeyPath parameter like below
//CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"];
[anim setDuration:self.speed]; // Animation duration
[anim setAutoreverses:NO];
[anim setRepeatCount:HUGE_VALF]; // Perfrom animation large number of times
[anim setFromValue:[NSNumber numberWithDouble:0.0f]];
[anim setToValue:[NSNumber numberWithDouble:(M_PI * 2.0f)]];
[[imageView layer] addAnimation:anim forKey:@"wheeloRotation"];
}
Я вызываю этот метод анимации из моего метода viewWillAppear. Когда приложение переходит в фоновый режим, а затем снова появляется, анимация больше не работает. После поиска в Google я нашел это от Apple. Хорошо, я реализовал подобные рекомендации Apple в том же файле viewcontroller.m, в котором есть метод perform360rotation для поворота вида.
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:[self.wheelView layer]];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
NSLog(@"pauseLayer:paused time = %f",pausedTime);
}
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
NSLog(@"resumeLayer:paused time = %f",pausedTime);
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:[self.wheelView layer]] - pausedTime;
layer.beginTime = timeSincePause;
}
Опять же, при поиске в Google я увидел, что по общему мнению я вызываю методы паузы и возобновления из AppDelegate. Я сделал это так (lVC - это класс viewcontroller.m, о котором я упоминал в начале этого вопроса. Методы pauseLayer и resumeLayer вызываются изнутри его методов viewWillAppear и viewWillDisappear):
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[lVC viewWillDisappear:YES];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[lVC viewWillAppear:YES];
}
Костей пока нет. Анимация по-прежнему не возобновляется, когда приложение снова выходит на передний план. Что-то я делаю не так?