概述
项目中有个功能用到了图片的缩放。之前写的方法是在imageView
上面add
了一个捏合手势,然后根据pinch
手势的scale
设置imageView
的frame
,效果不是很好,也没有回弹效果。今天准备解决这个问题,于是各种查资料,找到了这个方法。
原理
在使用UIScrollView
自带的捏合手势时,会回调
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
这个代理方法,这个代理方法返回的view
就是需要缩放的view
。
代码
创建scrollView
对象
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
scrollView.delegate = self;
//设置最大放大倍数,默认是1.0
scrollView.maximumZoomScale = 3.0;
//设置最小缩小倍数,默认是1.0
scrollView.minimumZoomScale = 0.5;
//设置默认缩放倍数,默认是1.0
scrollView.zoomScale = 1.0;
//是否打开缩放回弹效果,默认是YES
scrollView.bouncesZoom = YES;
[self.view addSubview:scrollView];
声明需要缩放的imageView
对象,全局变量
@property (nonatomic, strong) UIImageView *imageView;
实例化对象
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
self.imageView.frame = scrollView.bounds;
[scrollView addSubview:self.imageView];
scrollView
的代理方法
返回需要缩放的子视图
#pragma mark - UIScrollViewDelegate
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
//返回需要缩放的子视图
return self.imageView;
}
缩放前调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
//缩放前调用
}
正在缩放时调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
//正在缩放时调用
}