Search code examples
iphoneiosuiimageviewcgaffinetransform

Problem scaling UIImageView with Pinch Gesture


I have a program that creates a small UIImageView that responds to touch so you can drag it around the superview.

I added a UIPinchGestureRecognizer in order to Scale the image up and down. With the current code, the image scales up and down perfectly but restarts at scale 1.0 when a new pinch gesture starts.

I tried using contentScaleFactor to get the initial ImageView scale but it's always 1.0, so clearly the below code won't work properly.

- (void)doPinch:(UIPinchGestureRecognizer *)pinch {



if (pinch.state == UIGestureRecognizerStateBegan) {

    initialScale = dragImage.contentScaleFactor;        

    } else {

    CGFloat newScale = initialScale * pinch.scale;

    CGAffineTransform transform = CGAffineTransformMakeScale(newScale,newScale);

    dragImage.transform = transform;

    }


}

This code was adapted from the "Pinch me" example in the Apress Beginning iPhone 4 Development book.

Since contentScaleFactor doesn't work, do I need to use a core graphics property? Does CGAffineTransformScale have something to do with it?

Thanks!


Solution

  • contentScaleFactor doesn't do what you think it does ... what you want is to replace this line:

    initialScale = dragImage.contentScaleFactor; 
    

    with

    initialScale = dragImage.transform.a;
    

    ... and you'll be a happy camper ("a" represents the x scale factor of the transformation matrix currently applied to dragImage).