Анимация на iPhone - использовать последовательность изображений или вращение?

Я создаю базовую анимацию для своего приложения для iPhone. У меня есть выбор между двумя различными типами анимации. Я могу использовать это...

NSArray *myImages = [NSArray arrayWithObjects: 
[UIImage imageNamed:@"myImage1.png"], 
[UIImage imageNamed:@"myImage2.png"], 
[UIImage imageNamed:@"myImage3.png"], 
[UIImage imageNamed:@"myImage4.gif"], nil]; 

UIImageView *myAnimatedView = [UIImageView alloc]; 
[myAnimatedView initWithFrame:[self bounds]]; 
myAnimatedView.animationImages = myImages; 
myAnimatedView.animationDuration = 0.25;  
[self addSubview:myAnimatedView]; 
[myAnimatedView release];

или как то так...

    [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationDuration:1.5];
 // other animations goes here
 myImage.transform = CGAffineTransformMakeRotation(M_PI*0.5);
 // other animations goes here
 [UIView commitAnimations];

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

3 ответа

В вашем вопросе нужно учесть множество переменных. Многое из этого будет зависеть от размера и сложности изображений и частоты, с которой анимация будет работать. Я догадываюсь, что использование API при условии, что преобразование будет самым дешевым, но единственный реальный способ сказать, это провести стресс-тестирование обеих анимаций и посмотреть, какое из них лучше в вашем случае.

Итак, коренная проблема, которую вы должны рассмотреть, это то, сколько кадров анимации вы ожидаете в памяти за один раз. Неважно, используете ли вы animationImagesArray или одно огромное изображение со всеми кадрами в одном. Хранение декодированных данных изображения в памяти занимает много места, вы можете избежать неприятностей с небольшим количеством маленьких изображений, но вы можете легко написать код, который может привести к сбою устройства из-за использования всей памяти., См. Мой пост в блоге об этой конкретной проблеме video-and-memory-use-on-ios-devices. Лучший способ написать свой код - просто не хранить все декодированные кадры видео (UIImages или CGImageRefs) в памяти одновременно.

Я бы выбрал гибрид: генерируйте ваши неподвижные изображения из кода анимации и сохраняйте слой в CGImages.

Другие вопросы по тегам