//在.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 ;
}];
}