封装用于图片的放大与缩小的类BaseImgView——iOS学习连载34

//在.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 ];
    }
   
    // 初始化进度条(需要导入第三方框架 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 ;
   }
   
// 初始化子视图
    [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 ;
    }];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值