Search code examples
iosiphoneobjective-cuiimageviewuipinchgesturerecognizer

rotating moving scaling of UIImageView moving inversly after rotating by 180*


Here is my code for moving,scaling and rotating the UIImageView all work fine but the issue is when we rotate the ImageView it rotates but after then it move inversely like i am dragging toward right but the ImageView is going left cant we get the current center point after rotating so that we when we drag the center points are of that rotated ImageView not original one

this is the custom class inherited by UIImageView

#pragma mark Manipulation
-(void)scale:(id)sender {
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) 
{
        _lastScale = 1.0;
    }

    CGFloat scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]);

    CGAffineTransform currentTransform = self.transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);

    [self setTransform:newTransform];


    _lastScale = [(UIPinchGestureRecognizer*)sender scale];
    [self showOverlayWithFrame:self.frame];
}


-(void)rotate:(id)sender {

    if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {

        _lastRotation = 0.0;

        return;
    }


    CGFloat rotation = 0.0 - (_lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);

    CGAffineTransform currentTransform = self.transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);

    [self setTransform:newTransform];
    _lastRotation = [(UIRotationGestureRecognizer*)sender rotation];

    [self showOverlayWithFrame:self.frame];





}


-(void)move:(id)sender {

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self];

     if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
         _firstX = [self center].x;
         _firstY = [self center].y;
    }

    translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);

    [self setCenter:translatedPoint];


    [self showOverlayWithFrame:self.frame];

}

Solution

  • by changing this line in -(void)move:(id)sender just got my task done

    Older

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self];
    

    Correct

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:[self superview]];