2012-04-05 49 views
1

我正在使用以下代碼通過在左右箭頭上開始手勢來旋轉圖像。沿着旋轉移動箭頭。旋轉圖像突然翻轉

- (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; 
} 

時開始轉動它完美fine.Say第一次,右箭頭是0度now..when我從這裏開始旋轉,並釋放在這裏工作fine.When我釋放旋轉其他地方則嘗試旋轉180度後,圖像開始精確翻轉180度。

+0

難道你忘記了一個「=」,在'角度+ = lastReleasedAngle =角度;;'? – Saphrosit 2012-04-05 11:12:54

+0

是啊,我編輯時的錯誤。 – user1226038 2012-04-05 11:15:49

回答