美文网首页
UIScrollView 实现缩放功能

UIScrollView 实现缩放功能

作者: 米亚流年 | 来源:发表于2018-07-04 11:14 被阅读0次
    链接
    https://www.cnblogs.com/wendingding/p/3754268.html
    
    1.
    if (maxScale > 1) {
         //设置缩放比例
        scr.maximumZoomScale = maxScale;
         //设置scrollView的代理为当前控制器
        scr.delegate = self;
    }
    
    2.当前控制器成为代理
     @interface MYSeeBigPictureViewController () <UIScrollViewDelegate>
    
    3.真正实现代理的方法
    #pragma mark - UIScrollViewDelegate
    //Asks the delegate for the view to scale when zooming is about to occur in the scroll view.
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return self.imageView;
    }
    
    查看大图控制器
     //
    //  MYSeeBigPictureViewController.m
    //  百思不得姐
    //
    //  Created by 吴飞 on 2018/6/30.
    //  Copyright © 2018年 吴飞. All rights reserved.
    //
    
    #import "MYSeeBigPictureViewController.h"
    
    //分类
      #import "UIView+frame.h"
    
    //第三方
    #import <UIImageView+WebCache.h>
    #import <SVProgressHUD.h>
    
    //宏
    #define MYScreenH [UIScreen mainScreen].bounds.size.height
    #define MYScreenW [UIScreen mainScreen].bounds.size.width
    @interface MYSeeBigPictureViewController () <UIScrollViewDelegate>
    @property (weak, nonatomic) IBOutlet UIButton *saveButton;
    
    @property(weak,nonatomic) UIImageView *imageView;
    
    @end
    
    @implementation MYSeeBigPictureViewController
    - (IBAction)back:(id)sender {
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    
    - (IBAction)save:(UIButton *)sender {
    
    }
    
    
    - (void)viewDidLoad {
      [super viewDidLoad];
      UIScrollView *scr = [[UIScrollView alloc] init];
      scr.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
      scr.frame = self.view.bounds;
    //给UIScrollView增加手势,
    [scr addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(back:)]];
    //这个地方不能使用addSubView 因为当前控制的view是先加载xib完成后再插入的UIScrollView 控件
    //    [self.view addSubview:scr];
    //所以要使用insert
    [self.view insertSubview:scr atIndex:0];
    
    //添加UIImageView 到scrollView
    UIImageView *imageView = [[UIImageView alloc ] init];
    self.imageView = imageView;
    //当图片下载成功后 按照按钮可用
    [imageView sd_setImageWithURL:[NSURL URLWithString:self.topic.image1] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        if (!image){
            [SVProgressHUD showErrorWithStatus:@"图片下载失败"];
            return ;
        }
        self.saveButton.enabled = YES;
    }];
    //宽度 = scrollView的宽度
    imageView.MY_Width = scr.MY_Width;
    //高度 = 按照服务器返回的图片宽高进行缩放
    CGFloat h = (scr.MY_Width * self.topic.height) / self.topic.width;
    imageView.MY_Height = h;
    imageView.MY_x = 0;
    
    
    
    if (imageView.MY_Height > MYScreenH) {//图片高度超过一个屏幕 得按照图片真实的高度 增加滚动操作
        imageView.MY_y = 0;
        //scrollView的设置contentSize
        scr.contentSize = CGSizeMake(0, imageView.MY_Height);
    }else{
        imageView.MY_center = CGPointMake(MYScreenW * 0.5, scr.MY_Height * 0.5);
    }
    [scr addSubview:imageView];
    //图片缩放
    CGFloat maxScale = self.topic.width / imageView.MY_Width ;//图片的最大缩放比例
    if (maxScale > 1) {
        scr.maximumZoomScale = maxScale;
        scr.delegate = self;
    }
    
    }
    
    
    #pragma mark - UIScrollViewDelegate
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return self.imageView;
    }
    
    
    #pragma mark - 这个方法会调用多次(只要布局有变化,就会调用)
    - (void)viewDidLayoutSubviews {}
    
    - (void)viewDidAppear:(BOOL)animated{}
    @end
    

    相关文章

      网友评论

          本文标题:UIScrollView 实现缩放功能

          本文链接:https://www.haomeiwen.com/subject/fpqeuftx.html