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

本文详细介绍了如何在iOS应用中使用Swift语言通过添加点击事件来放大和缩小图片,并在.m文件中实现相应的手势交互功能。通过创建滑动视图、初始化子视图以及实现放大的动画效果,用户可以轻松地在应用中实现图片的动态缩放功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//在.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];
   
   
//设置fullImageViewframe,获取该视图相对于另一个视图的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;
    }];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值