scrollView中心缩放

众所周知通过设置

//设置最大比例

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

你可能感兴趣的:(scrollView中心缩放)