宽容他人,放过自己。

点击图片全屏显示实现

Posted on By anchoriteFili

相册提取照片测试_蒙版显示图_相册图片获取窗口设计.zip

//
//  ImageScrollView.h
//  相册提取照片测试
//
//  Created by 哈哈 on 15/10/14.
//  Copyright © 2015年 哈哈. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "UIImageView+WebCache.h"

@interface ImageScrollView : UIView


#pragma mark 对外接口
- (void)imageScrollViewWithX:(CGFloat)x Y:(CGFloat)y width:(CGFloat)width height:(CGFloat)height image:(UIImage *)image andWindow:(UIWindow *)window;

- (void)imageScrollViewWithX:(CGFloat)x Y:(CGFloat)y width:(CGFloat)width height:(CGFloat)height imageUrl:(NSURL *)imageUrl andWindow:(UIWindow *)window;

@end
//
//  ImageScrollView.m
//  相册提取照片测试
//
//  Created by 哈哈 on 15/10/14.
//  Copyright © 2015年 哈哈. All rights reserved.
//

#import "ImageScrollView.h"

@implementation ImageScrollView

/**
 里边内容:
  1.创建一个scrollView,将图片添加进去
    情况1:如果图片的宽度大于屏幕宽度,但是高度小于屏幕宽度,则以宽度为基础进行缩放比例
    情况2:如果图片宽度小于屏幕宽度,高度大于屏幕宽度,还是以宽度为基础进行放大比例
    情况3:如果图片的宽度和高度都大于屏幕比例,还是按照屏幕宽度进行缩小比例
    情况4:如果图片的宽和高都小于屏幕,则按照原比例进行居中添加
 
 综上所述:有两种情况,一是宽高都小于屏幕宽高的,原比例显示,另一种就是全部按照屏幕宽度比例显示
 */

/**
 层次关系:
 一层:这个ImageScrollView添加到window上,只要只要调用这个方法,就直接将其添加到window上
 二层:在ImageScrollView上添加一个scrollView,这个scrollView背景黑色,宽高比例与ImageScrollView一致
 三层:在scrollView上添加imageView层,上面显示传过来的图片
 四层:在imageView上添加一个点击的手势,点击移除整个ImageScrollView
 
 */

#pragma mark 接收图片网址添加放大图
- (void)imageScrollViewWithX:(CGFloat)x Y:(CGFloat)y width:(CGFloat)width height:(CGFloat)height imageUrl:(NSURL *)imageUrl andWindow:(UIWindow *)window {
    
    UIImageView *imageView = [[UIImageView alloc] init];
    
    [imageView sd_setImageWithURL:imageUrl completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        
        [self imageScrollViewWithX:x Y:y width:width height:height image:imageView.image andWindow:window];
    }];
}

- (void)imageScrollViewWithX:(CGFloat)x Y:(CGFloat)y width:(CGFloat)width height:(CGFloat)height image:(UIImage *)image andWindow:(UIWindow *)window {
 
#pragma mark 根据发过来的坐标大小来创建ImageScrollView
    self.frame = CGRectMake(x, y, width, height);
    
    self.backgroundColor = [UIColor redColor];
    [window addSubview:self];
    
#pragma mark 在ImageScrollView上创建scrollView
#pragma mark 创建UIScrollView
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    scrollView.backgroundColor = [UIColor blackColor];
    
    //    隐藏水平/垂直指示条 indicator指示条
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    
    //    设置能否进行翻页
    scrollView.pagingEnabled = NO;
    
    //    边界回弹
    scrollView.bounces = YES;
    
    //    移到顶端
    scrollView.scrollsToTop = YES;
    scrollView.scrollsToTop = NO;
    
    //    能否滚动
    scrollView.scrollEnabled = YES;
    
    //    垂直/竖直方向回弹没用
    //    垂直方向能否回弹
    scrollView.alwaysBounceVertical = YES;
    [self addSubview:scrollView];
    
#pragma mark 在scrollView上添加imageView
    UIImageView *imageView = [[UIImageView alloc] init];
    [scrollView addSubview:imageView];
    
#pragma mark 对图片进行处理
    UIImage *newImage = [[UIImage alloc] init];
    
    if (image.size.width<width && image.size.height<height) {
        imageView.contentMode = UIViewContentModeCenter;
        imageView.frame = CGRectMake(0, 0, width, height);
        imageView.image = image;
        
    } else {
        
        newImage = [self imageWithImageSimple:image scaledToSize:CGSizeMake(width, 0)];
        imageView.image = newImage;
        
        if (newImage.size.height<height) {
            
            imageView.contentMode = UIViewContentModeCenter;
            
            imageView.frame = CGRectMake(0, 0, newImage.size.width, height);
            scrollView.contentSize = CGSizeMake(newImage.size.width, height);
            
        } else {
            imageView.frame = CGRectMake(0, 0, newImage.size.width, newImage.size.height);
            scrollView.contentSize = CGSizeMake(newImage.size.width, newImage.size.height);
        }
    }
    
#pragma mark 在imageView上添加tap手势
    //1、创建手势实例,并连接方法handleTapGesture,点击手势
    UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTapGesture:)];
    
    tapGesture.numberOfTapsRequired=1;
    // imageView添加手势识别
    [scrollView addGestureRecognizer:tapGesture];
    
}

#pragma mark 点击手势点击事件
- (void)handleTapGesture:(UITapGestureRecognizer *)sender {
    [self removeFromSuperview];
}

#pragma mark - 缩放图片
- (UIImage *)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize {
    newSize.height = image.size.height * (newSize.width/image.size.width);
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return  newImage;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end