1.在.h文件中加入一个变量用来记录当前的scale值, 让这个ViewController遵循
UIGestureRecognizerDelegate代理.
并在.h中加入下面这个变量
CGFloat lastScale;
UIView *holderView = [[UIViewalloc]initWithFrame:CGRectMake(0,0,320, 416)];
UIImageView *showImgView = [[UIImageViewalloc]initWithFrame:CGRectMake(0,0,320, 416)];
showImgView.image =img;
showImgView.contentMode =UIViewContentModeScaleAspectFit;
[holderView addSubview:showImgView];
[showImgView release];
UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizeralloc]initWithTarget:selfaction:@selector(scaGesture:)];
[pinchRecognizersetDelegate:self];
[holderView addGestureRecognizer:pinchRecognizer];
[pinchRecognizerrelease];
[self.viewaddSubview:holderView];
[holderView release];
-(void)scaGesture:(id)sender {
[self.viewbringSubviewToFront:[(UIPinchGestureRecognizer*)senderview]];
//当手指离开屏幕时,将lastscale设置为1.0
if([(UIPinchGestureRecognizer*)senderstate] == UIGestureRecognizerStateEnded) {
lastScale = 1.0;
return;
}
CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)senderscale]);
CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)senderview].transform;
CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
[[(UIPinchGestureRecognizer*)senderview]setTransform:newTransform];
lastScale = [(UIPinchGestureRecognizer*)senderscale];
}
4. 加入手势的代理方法
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return ![gestureRecognizer isKindOfClass:[UIPanGestureRecognizerclass]];
}
5、运行程序,效果如图:(注意这里只能是以图片中心放大的,不能进行移动图片,若要移动图片,需要修改其Transform部分代码)
下面这个图是从别处找来的, 自己截图并上传比较麻烦, 呵呵
注意:请在真机上运行,在模拟器中无法模拟Pinch手势, 按住option和shift键在模拟器上也能模拟出两个手指的手势