//
// 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