2009-06-22 2 views
0

Мне нужно повернуть UIImage в ответ на ввод пользователя. Я хотел бы, чтобы это было настолько скользким, насколько это возможно, и поэтому хотелось бы знать, какой самый быстрый способ выполнить преобразование и визуализацию. В идеале я хотел бы остаться в рамках UIKit или Quartz. Свойства изображения являются следующие:Самый быстрый способ поворота изображения на iPhone

  • Размер приблизительно 250x300 пикселей
  • Не непрозрачным - нужно сделать с альфа-каналом

Каковы наиболее эффективные подходы и методы для реализации этой функции?

Примечание: Существует подход, описанный в этом stackoverflow answer, но я не уверен, что это оптимально. Я, конечно, попробую, но я бы хотел узнать, считается ли это «лучшей практикой».

ответ

6

Этот пример нанесения слоя Core Animation к UIImage может обеспечить некоторое вдохновение:

UIImage* rotatingImage = [UIImage imageNamed:@"someImage.png"]; 

CATransform3D rotationTransform = CATransform3DMakeRotation(1.0f * M_PI, 0, 0, 1.0); 
CABasicAnimation* rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; 

rotationAnimation.toValue = [NSValue valueWithCATransform3D:rotationTransform]; 
rotationAnimation.duration = 0.25f; 
rotationAnimation.cumulative = YES; 
rotationAnimation.repeatCount = 10; 

[rotatingImage.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
+0

Спасибо, что поделились этим вариантом Core Animation. Я тоже попробую. – teabot

+0

Я согласен с предложением Core Animation. Если вы выполняете анимированное вращение через Quartz, вы увидите ужасную производительность из-за всех перерисовок, которые вам понадобятся. Вы также можете проверить http://stackoverflow.com/questions/486609/how-can-i-use-animation-in-cocos2d и http://stackoverflow.com/questions/839296/how-can-i -rotate-a-uiimageview-with-respect-to-any-point-other-than-its-center –

+0

Shouldnt rotatingImage - это UIImageView? И установите его изображение с помощью someImage.png, потому что UIImage не обладает свойством layer. – jarryd

1

Если вы показываете ваш UIImage в UIImageView, почему не только установить преобразование собственности на представлении?

myimageView.transform = CGAffineTransformMakeRotation(<angle in radians>); 

Это так же просто, как и для маленького изображения, как ваш говорить об этом весьма производительным - все виды UIKit являются слой поддерживается, так что это аппаратное ускорение. Это свойство также анимируется.