您的位置:首页 > 移动开发 > IOS开发

ios 根据手势放大或缩小图片

2012-05-15 18:47 549 查看


1.在.h文件中加入一个变量用来记录当前的scale值, 让这个ViewController遵循
UIGestureRecognizerDelegate代理.
并在.h中加入下面这个变量
CGFloat lastScale;

2. 在viewDidLoad中加入下面语句

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

3.在加入这个手势的执行方法

-(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键在模拟器上也能模拟出两个手指的手势
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: