iphoneipadioscgaffinetransform

Max/Min Scale of Pinch Zoom in UIPinchGestureRecognizer - iPhone iOS


How would I be able to limit the scale of the UIPinchGestureRecognizer to a min and max level? The scale property below seems to be relative to the last known scale (the delta from last state) and I can't figure out how to set a limit to the size/heigh of the object being zoomed.

-(void)scale:(id)sender {

[self.view bringSubviewToFront:[(UIPinchGestureRecognizer*)sender view]];

if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
    lastScale = 1.0;
    return;
}

CGFloat pinchscale = [(UIPinchGestureRecognizer*)sender scale];
CGFloat scale = 1.0 - (lastScale - pinchscale);
CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
CGAffineTransform holderTransform = holderView.transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];

lastScale = [(UIPinchGestureRecognizer*)sender scale];

}


Solution

  • There isn't a way to limit the scale on a UIPinchGestureRecognizer. To limit the height in your code, you should be able to do something like this:

    CGFloat scale = 1.0 - (lastScale - pinchscale);
    CGRect bounds = [(UIPinchGestureRecognizer*)sender view].bounds;
    scale = MIN(scale, maximumHeight / CGRectGetHeight(bounds));
    scale = MAX(scale, minimumHeight / CGRectGetHeight(bounds));
    

    To limit width, change 'Height' to 'Width' in the last two lines.