实现一张图片的缩放

时间:2022-04-04 20:34:31

-(void)addAllViews

{

    

    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];

    

    self.scrollView = scrollView;

    

    //要想可以缩放视图,需要设置最小和最大缩放比例。

    scrollView.minimumZoomScale = 0.8;

    scrollView.maximumZoomScale = 3;

    

    [self addSubview:scrollView];

    

    //加载图片

    UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"pingmu.png"]];

    

    imageView.frame = CGRectMake(0, 0, 1280, 1000);

    

    self.imageView = imageView;

    

    self.imageView.tag = 100;

    

    [self.scrollView addSubview:imageView];

    

    //设置内容尺寸,关键点:contenSizescrollView本身的大小。

    scrollView.contentSize = imageView.frame.size;

    

    // 设置偏移量

    

//    scrollView.contentOffset = CGPointMake(100, 0);

    

    

    //点击状态栏,是否回到顶部,默认是YES

    scrollView.scrollsToTop = YES;

    

    

    //设置是否整页滑动

    scrollView.pagingEnabled = YES;

    

    //是否开启边界回弹效果.就是能看到scrollView,默认是YES,只是限制手势上的滚动。

    scrollView.bounces = NO;

    

    //设置是否允许图片滚动,默认是是YES

    scrollView.scrollEnabled = YES;

    

    

    //如果contentSize < scrollView 的大小,设置alwaysBounceVertical 以及 alwaysBounceHorizontal 属性,也是可以滑动的。

    imageView.frame = self.frame;

    

    scrollView.alwaysBounceHorizontal = YES;

    scrollView.alwaysBounceVertical = YES;

}


=================================================


- (void)viewDidLoad {

    [super viewDidLoad];

    

#pragma mark ============= UIScrollView  ==================

    

    self.rootView.scrollView.delegate = self;

    

    

    

}

//实现协议方法


- (void)scrollViewDidScroll:(UIScrollView *)sender

{

    

    NSLog(@"%@",sender);

}

//设置可以缩放的图片

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

{

    

    //通过tag值,获取内部的图片,并返回。

    return [scrollView viewWithTag:100];


}



//view是可以缩放的那个视图。

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale

{

    //单独这样设置的话,放大的时候,就会因为contenSize的大小而舍弃掉某些内容。

//    view.center = scrollView.center;

    

    

    //由于缩放即是修改了缩放视图的大小,也修改了contentSize,所以不能单纯的使用。center

    

    

    //获取缩放视图的位置和大小

    CGRect viewFrame = view.frame;

    //获取scrollView的大小

    CGSize scrollViewSize = scrollView.frame.size;

    //如果内容视图的宽度,小于scrollView的宽度,需要进行计算,否则,设置为0.

    if (viewFrame.size.width < scrollViewSize.width) {

        viewFrame.origin.x = (scrollViewSize.width - viewFrame.size.width)/2;

    }else

    {

        viewFrame.origin.x = 0;

    }

    

    

    //如果内容视图的高度,小于scrollView的宽度,需要进行计算,否则,设置为0.

    

    if (viewFrame.size.height < scrollViewSize.height) {

        viewFrame.origin.y = (scrollViewSize.height - viewFrame.size.height)/2;

    }else

    {

        viewFrame.origin.y = 0;

    }

    //将计算好的值 赋给view

    view.frame = viewFrame;

    

    

}