2009-07-13 5 views
0

Sur iPhone, comment appliquer une rotation de l'image autour du point central en utilisant le toucher au doigt?Comment faire pivoter l'image autour du point central automatiquement avec la touche tactile

Tout comme la roue, si vous mettez le doigt sur l'écran de l'iPhone, puis bougez soudainement, puis l'image tournant autour du centre comme la roue, après un certain temps, elle devient de plus en plus lente, enfin arrêt.

Qui peut aider à donner quelques codes de codes (Object-C) ou suggérer?

Répondre

1

J'utiliserais les transformations affines - vous pouvez assigner une transformation à n'importe quel élément de couche ou d'interface utilisateur en utilisant la propriété transform.

Vous pouvez créer une transformation de rotation en utilisant CGAffineTransform CGAffineTransformMakeRotation( CGFloat angle) qui retournera une transformation qui fait pivoter un élément. La rotation par défaut doit être autour du point central. Sachez que la rotation est limitée à 360 degrés, donc si vous voulez faire pivoter quelque chose de plus (par exemple, 720 degrés), vous devez casser la rotation en plusieurs séquences. Vous pouvez trouver this SO article utile également

1

La propriété transform d'une vue ou d'un calque peut être utilisée pour faire pivoter l'image affichée à l'intérieur. En ce qui concerne la partie tournante, vous n'avez qu'à suivre l'emplacement et le mouvement des touches dans votre vue avec touchesBegan, touchesMoved et touchEnded. Utilisez la distance et la durée entre les mises à jour de touches pour calculer une vitesse et utilisez-la pour définir une vitesse de rotation. Une fois que vous avez démarré la rotation de l'image, mettez à jour la position périodiquement (avec un NSTimer, peut-être), et réduisez la vitesse de rotation de quelques constantes.

2

Je travaillais avec un "spin the bottle" -app hier. Sur la fenêtre, j'ai un ImageView avec une bouteille qui est censée répondre à des touches et tourner la façon dont l'utilisateur glisse son doigt. J'ai eu du mal à faire pivoter mon ImageView pendant les événements tactiles (TouchesBegan, Touchesoved, TouchesEnd). J'ai utilisé ce code dans TouchesMoved pour trouver l'angle dans lequel tourner l'image.

public override void TouchesMoved (NSSet touches, UIEvent evt) 
{  
    PointF pt = (touches.AnyObject as UITouch).LocationInView(this); 

    float x = pt.X - this.Center.X; 
    float y = pt.Y - this.Center.Y; 
    double ang = Math.Atan2(x,y); 

    // yada yada, rotate image using this.Transform 
} 

CECI EST IMPORTANT! Lors de la rotation de l'ImageView, même les modifications des coordonnées y 0 x &. Donc toucher la même zone tout le temps me donnerait des valeurs différentes dans les points pt et prePt. Après réflexion, googeling et lecture, j'ai trouvé une solution simple au problème. Le "SuperView" -property de l'ImageView.

PointF pt = (touches.AnyObject as UITouch).LocationInView(this.SuperView); 

Avoir ce petit changement en place a rendu beaucoup plus facile, non je peux utiliser le UITouch-metohs LocationInView et PreviousLocationInView et obtenir le droit x & y coordonne. Elle fait partie de mon code. L'espoir qui a aidé quelqu'un à passer des heures sur la façon de comprendre comment faire flipper tourner une bouteille! :)

Questions connexes