2009-06-22 12 views
0

Ich muss ein UIImage in Reaktion auf Benutzereingaben drehen. Ich möchte, dass dies so glatt wie möglich ist und möchte daher wissen, welcher der schnellste Weg ist, um die Transformation durchzuführen und zu rendern. Idealerweise würde ich gerne in den UIKit- oder Quartz-Frameworks bleiben. Die Eigenschaften des Bildes sind wie folgt:Schnellster Ansatz zum Drehen eines Bildes auf dem iPhone

  • Größe ca. 250x300 Pixel
  • Nicht undurchsichtig - muss mit einem Alphakanal für die Durchführung dieser Funktionalität

Was sind die besten Ansätze und Praktiken machen?

Hinweis: Es gibt einen Ansatz beschrieben in dieser stackoverflow answer, aber ich bin unsicher, ob dies optimal ist. Ich werde das natürlich versuchen, aber ich würde gerne wissen, ob dies als "Best Practice" gilt.

Antwort

6

dieses Beispiel wird eine Core Animation Schicht auf eine UIImage der Anwendung könnte Inspiration bieten:

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

Vielen Dank für die Freigabe dieser Core Animation-Variante. Ich werde es auch versuchen. – teabot

+0

Ich stimme dem Kernanimationsvorschlag zu. Wenn Sie eine animierte Rotation über Quartz durchführen, werden Sie aufgrund der erforderlichen Neuzeichnungen eine schreckliche Leistung sehen. Sie können auch http://stackoverflow.com/questions/486609/how-cani-i-use-animation-in-cocos2d und http://stackoverflow.com/questions/839296/how-can-i überprüfen -rotate-a-uiimageansicht-mit-respektieren-zu-irgendeinem-punkt-anders-als-sein-zentrum –

+0

Sollte rotierendeBild nicht ein UIImageView sein? Und setze sein Bild mit someImage.png, weil ein UIImage keine Layer-Eigenschaft hat. – jarryd

1

Wenn Sie Ihre UIImage in einem UIImageView angezeigten, warum nicht nur die Eigenschaft auf der Ansicht verwandeln gesetzt?

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

Es ist so einfach wie das, und für ein kleines Bild wie Ihr darüber zu sprechen ist hochperformant - alle UIKit Ansichten Schicht sind gesichert, so dass es Hardware beschleunigt. Diese Eigenschaft ist auch animierbar.

Verwandte Themen