zoukankan      html  css  js  c++  java
  • ios cell展示可滑动的图片

    需求:

    点击cell上的图片.图片以原图显示出来,可以放大或缩小.再次点击图片移除图片显示原来界面.(和QQ空间看图片类似)

    点击图片实现效果:

    1. 自定义一个 UITableView (KDImageDetailTableView) 在方法(- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style)里面设置代理对象手势,tableView的背景色,隐藏指示器等

    - (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style

    {

        self = [super initWithFrame:frame style:style];

        if (self) {

            // Initialization code

            //解决手势冲突(代理对象必须是UIScrollView类的对象)

            self.panGestureRecognizer.delegate = self;

            //设置代理对象

            self.dataSource = self;

            self.delegate = self;

            //设置背景颜色

            self.backgroundColor = [UIColor blackColor];

            self.backgroundView = nil;

            //去掉分割线

            self.separatorStyle = UITableViewCellSeparatorStyleNone;

            //设置横向

            //1.逆时针旋转

            self.transform = CGAffineTransformMakeRotation(-M_PI_2);

            //2.重新设置frame

            self.frame = frame;

            //3.隐藏滑动指示器

            self.showsHorizontalScrollIndicator = NO;

            self.showsVerticalScrollIndicator = NO;

            //4.设置单元格的高度

            self.rowHeight = kMainScreenWidth + 20;

            //开启翻页效果

            self.pagingEnabled = YES;

            //默认隐藏

            self.alpha = 0;

             self.queue = [NSOperationQueue mainQueue];

        }

        return self;

    }

    当视图的内容在屏幕上绘制的时候

    - (void)drawRect:(CGRect)rect

    {

        [super drawRect:rect];

        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.index inSection:0];

        [self scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];

    }

    实现数据源方法和代理方法

    #pragma mark - UITableView DataSource

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    {

        return self.dataList.count;

    }

     

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    {

        static NSString *identifier = @"imageDetailCellId";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

        self.showIndexpath = indexPath;

        if (cell == nil) {

            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] ;

            //去掉单元格的背景颜色

            cell.backgroundColor = [UIColor clearColor];

            cell.backgroundView = nil;

            //取消单元格的选中事件

            cell.selectionStyle = UITableViewCellSelectionStyleNone;

            //顺时针旋转单元格

            cell.contentView.transform = CGAffineTransformMakeRotation(M_PI_2);

            //--------------创建子视图------------

            //1.创建小的滑动视图(主要是为了缩放)

            UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 0, kMainScreenWidth, kMainScreenHeight)];

            //tag

            scrollView.tag = 201;

            //取消弹性效果

            scrollView.bounces = NO;

            //设置缩放比例

            scrollView.minimumZoomScale = 1.0;

            scrollView.maximumZoomScale = 2.0;

            scrollView.delegate = self;

            scrollView.backgroundColor = [UIColor clearColor];

            [cell.contentView addSubview:scrollView];

            //--------------创建图片---------

            UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kMainScreenWidth, kMainScreenHeight)];

                                      

    //      CGRectMake((kMainScreenWidth - 150)/2.0, (kMainScreenHeight -150)/2.0,150 , 150)];

            //设置填充方式

            imageView.contentMode = UIViewContentModeScaleAspectFit;

            imageView.userInteractionEnabled = YES;

            UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(imageTapAction:)];

            tap.numberOfTouchesRequired = 1;

            tap.numberOfTapsRequired = 1;

            [imageView addGestureRecognizer:tap];

            //tag

            imageView.tag = 2014;

            [scrollView addSubview:imageView];

            

            UIActivityIndicatorView *aIndicatorView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

            aIndicatorView.center = CGPointMake(kMainScreenWidth/2.0, kMainScreenHeight/2.0);

            aIndicatorView.hidden = YES;

            aIndicatorView.tag = 2015;

            [cell.contentView addSubview:aIndicatorView];

        }

        return cell;

    }

     

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

     

        [self.queue cancelAllOperations];

     

        NSString * imageUrl =self.dataList[indexPath.row];

         NSURL * requestAddress  =  [[KDDataTools share] getThumbnailUrlWithPath:imageUrl size:CGSizeMake(960, 720)];

    //    NSURL  * requestAddress = [NSURL URLWithString:imageUrl];

     

        UIImageView *imageView = (UIImageView *)[cell.contentView viewWithTag:2014];

        imageView.frame = CGRectMake((kMainScreenWidth - 150)/2.0, (kMainScreenHeight -150)/2.0,150 , 150);

        imageView.image = [self.thumbnailDic objectForKey:@(indexPath.row)];

        UIScrollView * scrollView = (UIScrollView *)[cell.contentView viewWithTag:201];

        UIActivityIndicatorView * aindicatorView =(UIActivityIndicatorView *) [cell.contentView viewWithTag:2015];

        [aindicatorView startAnimating];

        

        __weak UIImageView *weakImageView = imageView;    

        [imageView setImageWithURL:requestAddress placeholderImage:[self.thumbnailDic objectForKey:@(indexPath.row)] options:SDWebImageRetryFailed success:^(UIImage *image) {

           

            // 1.把高清图片现实上去

            weakImageView.image = image;

            // 计算图片视图的高度 height / kscreenWith = size.heiht / size.with

            float height = weakImageView.image.size.height /weakImageView.image.size.width  * kMainScreenWidth;

            height = MAX(height, kMainScreenHeight);

            weakImageView.frame = CGRectMake(0, 0, kMainScreenWidth, height);

            scrollView.contentSize = CGSizeMake(kMainScreenWidth, height);

            [aindicatorView stopAnimating];

            

        } failure:^(NSError *error) {

            

        }];

     

    }

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

        

        [self colse];

    }

    - (void)colse{

        

        [UIView animateWithDuration:.35f animations:^{

            

            self.alpha = 0;

        }];

        [self performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:.35f];

    }

    - (void)imageTapAction:(UITapGestureRecognizer *)tap{

        

        [self colse];

    }

    #pragma mark - UIGestureRecognizer Delegate

    //下面的代理方法只要是YES所有的滑动手势都会响应

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    {

        return YES;

    }

    - (void)showInWindowFromsuperView:(UIView *)superView{

        

        UIWindow *windown = [superView window];

        [windown addSubview:self];

       

        [UIView animateWithDuration:1 animations:^{

            self.alpha = 1;

        }];

        

    }

     

    #pragma mark - UIScrollView Delegate

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    {

        //如果滑动的事表示图(我不在执行下面代码)

        if ([scrollView isMemberOfClass:[self class]]) {

            

            return;

        }

        

        

        if (scrollView.contentOffset.x == 0 || scrollView.contentOffset.x + scrollView.width >= scrollView.contentSize.width) {

            

        } else {

            //获取滑动视图里面的手势对象,并获取位置

            CGPoint point = [scrollView.panGestureRecognizer locationInView:self];

            int index = point.y / 340;

            //固定表示图

            self.contentOffset = CGPointMake(0, index *  340);

        }

    }

    这个方法返回的控件就是需要进行缩放的控件

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

    {

        UIImageView *imageView = (UIImageView *)[scrollView viewWithTag:2014];

        return imageView;

    }

  • 相关阅读:
    男人应该懂得的
    喝酒礼仪
    Office Web Apps开放测试
    SAP系统概要
    SAP实施成功的关键因素
    SAP企业实施的方法论
    ASAP
    ERP系统的组成部分
    去除word的保护
    实习周小结
  • 原文地址:https://www.cnblogs.com/supersr/p/5413531.html
Copyright © 2011-2022 走看看