Анимация на 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.