iOS 中实现图片点击全屏预览

作者: 彗星来的那一夜 | 来源:发表于2018-01-20 16:33 被阅读137次

    点击单张图片的全屏预览和双指捏合缩小放大

    #import "ViewController.h"
    
    @interface ViewController ()<UIScrollViewDelegate>
    @property (weak, nonatomic) IBOutlet UIImageView *picView;
    @property (weak, nonatomic) UIScrollView *scrollView;
    @property (weak, nonatomic) UIImageView *lastImageView;
    @property (nonatomic, assign)CGRect originalFrame;
    @property (nonatomic, assign)BOOL isDoubleTap;
    @end
     
    @implementation ViewController
     
    - (void)viewDidLoad {
     [super viewDidLoad];
      
     self.picView.userInteractionEnabled = YES;
     //添加单击手势
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showZoomImageView:)];
     
     [self.picView addGestureRecognizer:tap];
      
    }
     
    -(void)showZoomImageView:(UITapGestureRecognizer *)tap
    {
     if (![(UIImageView *)tap.view image]) {
      return;
     }
     //scrollView作为背景
     UIScrollView *bgView = [[UIScrollView alloc] init];
     bgView.frame = [UIScreen mainScreen].bounds;
     bgView.backgroundColor = [UIColor blackColor];
     UITapGestureRecognizer *tapBg = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapBgView:)];
     [bgView addGestureRecognizer:tapBg];
      
     UIImageView *picView = (UIImageView *)tap.view;
      
     UIImageView *imageView = [[UIImageView alloc] init];
     imageView.image = picView.image;
     imageView.frame = [bgView convertRect:picView.frame fromView:self.view];
     [bgView addSubview:imageView];
      
     [[[UIApplication sharedApplication] keyWindow] addSubview:bgView];
      
     self.lastImageView = imageView;
     self.originalFrame = imageView.frame;
     self.scrollView = bgView;
     //最大放大比例
     self.scrollView.maximumZoomScale = 1.5;
     self.scrollView.delegate = self;
      
     [UIView animateWithDuration:0.5 animations:^{
      CGRect frame = imageView.frame;
      frame.size.width = bgView.frame.size.width;
      frame.size.height = frame.size.width * (imageView.image.size.height / imageView.image.size.width);
      frame.origin.x = 0;
      frame.origin.y = (bgView.frame.size.height - frame.size.height) * 0.5;
      imageView.frame = frame;
     }];
    }
     
    -(void)tapBgView:(UITapGestureRecognizer *)tapBgRecognizer
    {
     self.scrollView.contentOffset = CGPointZero;
     [UIView animateWithDuration:0.5 animations:^{
      self.lastImageView.frame = self.originalFrame;
      tapBgRecognizer.view.backgroundColor = [UIColor clearColor];
     } completion:^(BOOL finished) {
      [tapBgRecognizer.view removeFromSuperview];
      self.scrollView = nil;
      self.lastImageView = nil;
     }];
    }
     
    //返回可缩放的视图
    -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
     return self.lastImageView;
    }
    

    相关文章

      网友评论

        本文标题:iOS 中实现图片点击全屏预览

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