0

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

}
Tirth
  • 7,801
  • 9
  • 55
  • 88
umairhhhs
  • 400
  • 6
  • 19

2 Answers2

0

2 options:

  1. Use CGAffineTransformTranslate the same way you've been using Scale and Rotate.
  2. Better yet, reset the affine transform, move the image view, then set the transform back.

Try this code for option 2:

CGAffineTransform t = self.transform;
self.transform = CGAffineTransformIdentity;
[self setCenter:translatedPoint];
self.transform = t;
Guy Kogus
  • 7,251
  • 1
  • 27
  • 32
0

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]];
umairhhhs
  • 400
  • 6
  • 19