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

初めて回転を開始すると、完全に正常に動作します.たとえば、右矢印は現在0度です..ここから回転を開始してここでリリースすると、正常に動作します.回転を他の場所でリリースしてから回転しようとすると、画像が正確に反転し始めます180 度移動した後、180 度に移動します。

4

1 に答える 1

0

ここの左、右の回転の例をチェックして、位置に応じてここからダウンロードしてください

于 2012-04-05T12:00:15.110 に答える