Производительность 1536 вращающихся CABasicAnimations

Так вот, на экране моего iPad у меня вращается 768 маленьких часов. Каждые часы имеют часовую и минутную стрелку. Эти визуальные вещи находятся внутри UIImageView. Я также пытался представить их через UIBezierPath/CAShapeLayer, но это не помогло производительности. Конечно, когда я пытаюсь анимировать все это, оно начинает лагать. Итак, есть ли способ оптимизировать это? Код анимации очень прост

CATransform3D rotationTransform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1);
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
rotationAnimation.toValue = [NSValue valueWithCATransform3D:rotationTransform];
rotationAnimation.duration = 0.5f;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = HUGE_VALF;
[_imageViewMinutePointer.layer addAnimation:rotationAnimation forKey:@"transform"];

person Tim Wachter    schedule 06.08.2013    source источник


Ответы (2)


Попробуйте использовать CAReplicatorLayer. Извините, у меня нет образца кода, потому что я сам им не пользовался, но слышал, что он упоминается в отношении производительности одновременной анимации многих элементов.

person Zev Eisenberg    schedule 06.08.2013
comment
Выглядит идеально, я попробую - person Tim Wachter; 07.08.2013

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

person Rob van der Veer    schedule 06.08.2013