//在.h文件中添加点击事件用来放大图片,并在.m文件进行实现
- (void)addTapEnlargeImgViewWithFullUrlStr:(NSString
*)urlStr
{
//开启点击事件
self.userInteractionEnabled = YES;
if(urlStr != nil)
{
fullImgUrl = urlStr;
}
//添加放大的手势
enlargeTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(enlargeImgView:)];
[self addGestureRecognizer:enlargeTap];
}
//初始化子视图
- (void)_initViews
{
//创建滑动视图
if(scrollView == nil)
{
scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];
scrollView.backgroundColor = [UIColor whiteColor];
//在滑动视图上添加缩小的手势
UITapGestureRecognizer *reduceTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(reduceImgView:)];
[scrollView addGestureRecognizer:reduceTap];
}
[self.window addSubview:scrollView];
//创建放大视图
if(fullImageView == nil)
{
fullImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
fullImageView.image = self.image;
fullImageView.contentMode = self.contentMode;
[scrollView addSubview:fullImageView];
}
{
//开启点击事件
self.userInteractionEnabled = YES;
if(urlStr != nil)
{
fullImgUrl = urlStr;
}
//添加放大的手势
enlargeTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(enlargeImgView:)];
[self addGestureRecognizer:enlargeTap];
}
//初始化子视图
- (void)_initViews
{
//创建滑动视图
if(scrollView == nil)
{
scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];
scrollView.backgroundColor = [UIColor whiteColor];
//在滑动视图上添加缩小的手势
UITapGestureRecognizer *reduceTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(reduceImgView:)];
[scrollView addGestureRecognizer:reduceTap];
}
[self.window addSubview:scrollView];
//创建放大视图
if(fullImageView == nil)
{
fullImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
fullImageView.image = self.image;
fullImageView.contentMode = self.contentMode;
[scrollView addSubview:fullImageView];
}
//初始化进度条(需要导入第三方框架DDProgressView.h文件)
if(progressView
==
nil)
{
progressView = [[DDProgressView alloc] initWithFrame:CGRectMake(10, (kScreenHeight - 10) / 2, kScreenWidth - 20, 10)];
//设置样式
progressView.outerColor = [UIColor orangeColor];
progressView.innerColor = [UIColor grayColor];
progressView.emptyColor = [UIColor cyanColor];
}
[self.window addSubview:progressView];
}
//放大图片的方法
- (void)enlargeImgView:(UITapGestureRecognizer *)tap
{
if(self.image == nil)
{
return;
}
//初始化子视图
{
progressView = [[DDProgressView alloc] initWithFrame:CGRectMake(10, (kScreenHeight - 10) / 2, kScreenWidth - 20, 10)];
//设置样式
progressView.outerColor = [UIColor orangeColor];
progressView.innerColor = [UIColor grayColor];
progressView.emptyColor = [UIColor cyanColor];
}
[self.window addSubview:progressView];
}
//放大图片的方法
- (void)enlargeImgView:(UITapGestureRecognizer *)tap
{
if(self.image == nil)
{
return;
}
//初始化子视图
[self
_initViews];
//设置fullImageView的frame,获取该视图相对于另一个视图的frame
CGRect rect = [self convertRect:rect toView:self.window];
fullImageView.frame = rect;
//刚开始隐藏进度条
progressView.hidden = YES;
//实现放大的动画
[UIView
animateWithDuration:0.3
animations:^{
CGFloat height =
kScreenWidth / (self.image.size.width
/
self.image.size.height);
fullImageView.frame = CGRectMake(0, 0, kScreenWidth, MAX(kScreenHeight, height));
scrollView.contentSize = CGSizeMake(kScreenWidth, height);
}
completion:^(BOOL finished) {
if(fullImgUrl == nil)
{
return;
}
[fullImageView sd_setImageWithURL:[NSURL URLWithString:fullImgUrl]placeholderImage:self.image options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
progressView.hidden = NO;
progressView.progress = (CGFloat)receivedSize / expectedSize;
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
[progressView removeFromSuperview];
progressView = nil;
}];
}];
}
//缩小图片的方法
- (void)reduceImgView:(UITapGestureRecognizer *)tap
{
[progressView removeFromSuperview];
progressView = nil;
[UIView animateWithDuration:0.3 animations:^{
//缩小图片的代理实现
if([self.imgSizeDelegate respondsToSelector:@selector(imgReduce)])
{
[self.imgSizeDelegate imgReduce];
}
fullImageView.frame = [self convertRect:self.bounds toView:self.window];
} completion:^(BOOL finished) {
[fullImageView removeFromSuperview];
fullImageView = nil;
[scrollView removeFromSuperview];
scrollView = nil;
}];
}
fullImageView.frame = CGRectMake(0, 0, kScreenWidth, MAX(kScreenHeight, height));
scrollView.contentSize = CGSizeMake(kScreenWidth, height);
}
completion:^(BOOL finished) {
if(fullImgUrl == nil)
{
return;
}
[fullImageView sd_setImageWithURL:[NSURL URLWithString:fullImgUrl]placeholderImage:self.image options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize) {
progressView.hidden = NO;
progressView.progress = (CGFloat)receivedSize / expectedSize;
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
[progressView removeFromSuperview];
progressView = nil;
}];
}];
}
//缩小图片的方法
- (void)reduceImgView:(UITapGestureRecognizer *)tap
{
[progressView removeFromSuperview];
progressView = nil;
[UIView animateWithDuration:0.3 animations:^{
//缩小图片的代理实现
if([self.imgSizeDelegate respondsToSelector:@selector(imgReduce)])
{
[self.imgSizeDelegate imgReduce];
}
fullImageView.frame = [self convertRect:self.bounds toView:self.window];
} completion:^(BOOL finished) {
[fullImageView removeFromSuperview];
fullImageView = nil;
[scrollView removeFromSuperview];
scrollView = nil;
}];
}