2009-06-22 5 views
0

Je dois faire pivoter un UIImage en réponse à la saisie de l'utilisateur. Je voudrais que ce soit aussi lisse que possible et, par conséquent, je voudrais savoir quel est le moyen le plus rapide d'effectuer la transformation et le rendu. Idéalement, j'aimerais rester dans les cadres UIKit ou Quartz. Les propriétés de l'image sont les suivantes:Approche la plus rapide pour faire pivoter une image sur l'iPhone

  • Taille environ 250x300 pixels
  • Non opaque - doit rendre un canal alpha

Quelles sont les meilleures approches et pratiques pour la mise en œuvre de cette fonctionnalité?

Remarque: Il existe une approche décrite dans ce stackoverflow answer mais je ne suis pas sûr que ce soit optimal. Je vais bien sûr essayer, mais je serais ravi de savoir si cela est considéré comme la «meilleure pratique».

Répondre

6

Cet exemple d'application d'une couche de base à une animation UIImage pourrait fournir une source d'inspiration:

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

Merci de partager cette variante Core Animation. Je vais essayer aussi. – teabot

+0

Je suis d'accord avec la suggestion Core Animation. Si vous faites une rotation animée via Quartz, vous verrez une performance terrible à cause de tous les redessins dont vous aurez besoin. Vous pouvez également consulter http://stackoverflow.com/questions/486609/how-can-i-use-animation-in-cocos2d et http://stackoverflow.com/questions/839296/how-can-i -rotate-a-uiimageview-with-respect-to-any-point-other-than-its-center –

+0

Shouldnt rotatingImage être un UIImageView? Et définissez son image avec someImage.png, car un UIImage n'a pas de propriété de calque. – jarryd

1

Si vous affichez votre UIImage dans un UIImageView, pourquoi ne pas simplement définir la propriété transform sur la vue?

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

Il est aussi simple que cela, et pour une petite image comme votre parler à ce sujet est très performant - toutes les vues UIKit sont couche soutenue, il est donc l'accélération matérielle. Cette propriété est également animable.

Questions connexes