众所周知通过设置
//设置最大比例
self.scrollView.maximumZoomScale=2;
//设置最小比例
self.scrollView.minimumZoomScale=0.2;
以及下面代码中的代理来实现scrollview的缩放,但没经过处理的缩放会以左上角为坐标缩放,不符合很多产品需求,所以在- (void)scrollViewDidZoom:(UIScrollView*)scrollView方法中做了一些处理。因为缩放的时候会改变scrollView的contentsize大小,所以通过content size来调整目标视图的位置是可取的。
Mark---因为缩放过程中也会调用scrollViewDidScroll,之前试过一次通过scrollViewDidScroll代理方法中设置layer的position属性等方法设置中心缩放,会出现缩放后图片边缘和scrollview之间留有空白的问题,这个问题一直解决不了,于是乎采取以下方式,最终解决问题。
代码如下
// ViewController.m
// scrollView缩放
//
// Created by lilz on 17/2/17.
// Copyright © 2017年ZG. All rights reserved.
//
#import"ViewController.h"
#define kWidth [UIScreen mainScreen].bounds.size.width
#define kHeight [UIScreen mainScreen].bounds.size.height
//1.遵守代理协议
@interfaceViewController()
@property(weak,nonatomic)UIScrollView*scrollView;
@property(weak,nonatomic)UIImageView*iconView;
@end
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
UIScrollView*scrollView = [[UIScrollViewalloc]initWithFrame:self.view.bounds];
self.scrollView= scrollView;
[self.viewaddSubview:scrollView];
self.scrollView.delegate=self;
//设置滚动范围
self.scrollView.contentSize=CGSizeMake(375,667);
//设置最大比例
self.scrollView.maximumZoomScale=2;
//设置最小比例
self.scrollView.minimumZoomScale=0.2;
UIImageView*iconView = [[UIImageViewalloc]init];
self.iconView= iconView;
[self.scrollViewaddSubview:iconView];
self.iconView.frame=self.scrollView.frame;
iconView.image= [UIImageimageNamed:@"cir1"];
}
//当用户进行捏合手势的时候,它会询问代理需要对其中那一个控件进行缩放
- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView
{
returnself.iconView;
}
- (void)scrollViewDidZoom:(UIScrollView*)scrollView
{
CGFloatxcenter = scrollView.center.x, ycenter = scrollView.center.y;
//目前contentsize的width是否大于原scrollview的contentsize,如果大于,设置imageview中心x点为contentsize的一半,以固定imageview在该contentsize中心。如果不大于说明图像的宽还没有超出屏幕范围,可继续让中心x点为屏幕中点,此种情况确保图像在屏幕中心。
xcenter = scrollView.contentSize.width> scrollView.frame.size.width? scrollView.contentSize.width/2: xcenter;
ycenter = scrollView.contentSize.height> scrollView.frame.size.height? scrollView.contentSize.height/2: ycenter;
[_iconViewsetCenter:CGPointMake(xcenter, ycenter)];
}
@end