2012-04-05 16 views
1

Ich benutze den folgenden Code, um ein Bild zu drehen, indem ich die Gesten auf den Pfeilen nach links und rechts anfange.Während die Pfeile entlang der Drehung bewegt werden.Drehen eines Bilds wird plötzlich umgelegt

- (void)handleRotation:(UIPanGestureRecognizer *)recognizer 
{ 

UIView* cview = self.superview.superview; 

UIView* lView = self.superview; 

CGPoint origin = [lView convertPoint: self.center toView: cview]; 

if (recognizer.state == UIGestureRecognizerStateBegan) 
{ 
    if (recognizer.view == leftImage) 
    { 
     initialP= [self convertPoint: leftImage.center toView: cview]; 
    } 
    else 
    { 
     initialP = [self convertPoint: rightImage.center toView: cview]; 
    } 
} 
CGPoint currentP = [recognizer translationInView:cview]; 
currentP.x += initialP.x; 
currentP.y += initialP.y; 

CGFloat angle = 0; 


CGFloat a = initialP.x - origin.x; 
CGFloat b = initialP.y - origin.y; 
CGFloat c = currentP.x - origin.x; 
CGFloat d = currentP.y - origin.y; 
angle = acosf(((a*c) + (b*d))/((sqrt(a*a + b*b)) * (sqrt(c*c + d*d)))); 


angle += lastReleasedAngle; 

if (currentP.y < (currentP.x *(initialP.y - origin.y) + (initialP.x * origin.y - initialP.y * origin.x))/(initialP.x - origin.x)) 
{ 
    angle = -angle; 
} 

if (recognizer.view == leftImage) 
{ 
    angle = -angle; 
} 

if(recognizer.state == UIGestureRecognizerStateBegan || 
    recognizer.state == UIGestureRecognizerStateChanged || recognizer.state == UIGestureRecognizerStateEnded) 
{ 

    [self setTransform: CGAffineTransformMakeRotation(angle)]; 
} 
if (recognizer.state == UIGestureRecognizerStateEnded) 
{ 

    lastReleasedAngle = angle; 
} 

Zum ersten Mal, wenn zu drehen beginnt es funktioniert perfekt fine.Say, Pfeil nach rechts ist bei 0 Grad now..when i Rotation startet von hier aus und lassen Sie sich hier funktioniert es fine.When löse ich die Rotation anderswo dann versucht Um zu drehen, beginnt das Bild genau 180 Grad zu drehen, nachdem es sich um 180 Grad bewegt hat.

+0

Hast du vergessen, ein "=" in 'Winkel + = lastReleasedAngle = Winkel ;;'? – Saphrosit

+0

Ja, mein Fehler beim Bearbeiten. – user1226038

Antwort

Verwandte Themen