当一个UIImageView实现了手势操作并可以用两指实现放大缩小之后,如何能限制放大缩小的比例?
(另:如何实现UIImageView的手势操作? --> iOS UIImageView实现拖动,放大/缩小,旋转)
来源:
http://stackoverflow.com/a/5446348/2177332
代码实现:
@property CGFloat lastScale;
- (void)pinchGestureDetected:(UIPinchGestureRecognizer *)recognizer
{
UIGestureRecognizerState state = [recognizer state];
if(state == UIGestureRecognizerStateBegan) {
// Reset the last scale, necessary if there are multiple objects with different scales
_lastScale = [recognizer scale];
}
if (state == UIGestureRecognizerStateBegan ||
state == UIGestureRecognizerStateChanged) {
CGFloat currentScale = [[[recognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];
// Constants to adjust the max/min values of zoom
const CGFloat kMaxScale = 3.0;
const CGFloat kMinScale = 1.0;
CGFloat newScale = 1 - (_lastScale - [recognizer scale]);
newScale = MIN(newScale, kMaxScale / currentScale);
newScale = MAX(newScale, kMinScale / currentScale);
CGAffineTransform transform = CGAffineTransformScale([[recognizer view] transform], newScale, newScale);
[recognizer view].transform = transform;
_lastScale = [recognizer scale]; // Store the previous scale factor for the next pinch gesture call
}
}
注:kMaxScale和kMinScale分别代表最大和最小的缩放比例。