`

tableView中图片点击全屏显示

阅读更多
//  tableView中的图片,点击后可以放大置全屏, 再点击缩小会原来位置
//

#import "HMViewController.h"

@interface HMViewController ()<UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, assign) CGRect fristFrame; // 存储每次要展示的图片frame, 方便缩小时使用
@property (nonatomic, strong) UIImageView *fullImageView; // 全屏展示的视图
@property (nonatomic, weak) UITableView *tableView; // tableview
@end

@implementation HMViewController


// 懒加载全屏视图
- (UIImageView *)fullImageView
{
    if (_fullImageView == nil) {
        
        // 视图和屏幕一样大
        _fullImageView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
        
        // 设置为可交互, 不然, 后面的手势根本不能用
        _fullImageView.userInteractionEnabled = YES;
        
        // 添加点击手势 ( 缩小图片时使用 )
        [_fullImageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionTap2:)]];
        
        // 设置视图内容填充模式.
        _fullImageView.contentMode = UIViewContentModeScaleAspectFit;
        
    }
    return _fullImageView;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    UITableView *tableView = [[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds];
    tableView.delegate = self;
    tableView.dataSource = self;
    
    self.tableView = tableView;
    
    [self.view addSubview:tableView];
    
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 20;
}

/* 该方法中的注释代码为自定义imageView */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//    UIImageView *imageView;// 自定义ImageView,
    
    static NSString *ID = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
        
//        imageView = [[UIImageView alloc]initWithFrame:CGRectMake(25, 5, 30, 30)];
//        imageView.userInteractionEnabled = YES;
//        imageView.tag = 1; // 自定义imageView时方便获取
//        [imageView addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(actionTap:)]];
//        [cell.contentView addSubview:imageView];
        
        // cell的imageView设置为可交互
        cell.imageView.userInteractionEnabled = YES;
        // 添加点击手势 ( 放大图片时使用 )
        [cell.imageView addGestureRecognizer:[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(actionTap:)]];
    }
    
    // 自定义imageView时使用
    //  imageView.image = [UIImage imageNamed:@"1"];
    
    cell.imageView.image = [UIImage imageNamed:@"1"];// 设置图片
    return cell;
}

/**
 *  图片放大
 */
-(void)actionTap:(UITapGestureRecognizer *)sender{
    
    // 根据点击手势的坐标,获取被点击的cell
    CGPoint loaction = [sender locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:loaction];
    UITableViewCell *cell = (UITableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
    
    // 自定义imageView时使用
    // UIImageView *imageView = (UIImageView *)[cell.contentView viewWithTag:1];
    
    // 从cell中获取imageView
    UIImageView *imageView = cell.imageView;
    
    // 转换坐标系
    // 转换cell中的imageView的frame  在self.view中的坐标系
    CGRect newFrame = [imageView convertRect:imageView.bounds toView:self.view];

    // 保存被点击的图片的frame, 缩小时使用
    self.fristFrame = newFrame;
    
//    if (![self.fullImageView superview]) { // 貌似没用, 检查是否有父视图
    
        // 设置全屏视图中的图片
        self.fullImageView.image = imageView.image;
        
        // 设置frame起始位置(动画开始位置)
        self.fullImageView.frame = self.fristFrame;
        
        // 设置背景颜色
        self.fullImageView.backgroundColor = [UIColor blackColor];
        
        // 添加到视图上面
        [self.view addSubview:self.fullImageView];
        
        // 动画效果展示为全屏
        [UIView animateWithDuration:0.5 animations:^{
            self.fullImageView.frame = [UIScreen mainScreen].bounds;
        }];
        
//    }
    
    
}

/**
 *  图片缩小
 */
-(void)actionTap2:(UITapGestureRecognizer *)sender{
    
    // 清除背景颜色
    self.fullImageView.backgroundColor = [UIColor clearColor];
    
    // 缩小图片动画
    [UIView animateWithDuration:0.5 animations:^{
        self.fullImageView.frame = self.fristFrame; // 动画缩小到初始位置
    } completion:^(BOOL finished) {
        [self.fullImageView removeFromSuperview];// 从父视图中移除全屏视图
    }];
}



@end

 

分享到:
评论

相关推荐

    IOS动态隐藏、显示tableview前方图片

    在iOS开发中,我们经常需要根据用户操作或者特定条件来改变UI元素的显示状态,比如在UITableView中,可能需要在某些情况下显示或隐藏表格前方的图片。这个过程可以通过编程方式实现,以达到更加灵活和个性化的界面...

    Qt Tableview显示数据

    在Qt框架中,`QTableView`是一个非常重要的组件,它用于显示二维表格数据,常用于数据的浏览和编辑。在本篇文章中,我们将深入探讨如何使用`QTableView`来显示数据,以及涉及到的相关知识点。 首先,`QTableView`是...

    qt TableView显示数据库表中的数据

    在Qt框架中,显示数据库表中的数据通常涉及到多个步骤,包括连接数据库、执行查询语句、将查询结果映射到TableView组件以及自定义数据模型。以下是对这些关键知识点的详细说明: 1. **Qt与数据库连接**:Qt提供了一...

    iOS开发之tableView点击下拉扩展与内嵌collectionView上传图片效果

    本话题主要涉及如何实现TableView的点击下拉扩展以及在内部嵌入CollectionView来实现图片上传的功能。以下将详细阐述这两个核心知识点。 首先,我们来看TableView的点击下拉扩展。这个功能通常用于隐藏或显示更多的...

    QT Mysql数据库通过QSqlTableModel在TableView中显示,支持翻页等功能

    包含MYSQL的数据库连接,TableView的表格设置,排序model的使用,数据库数据行数统计,每页只显示10行,每页中的每列可以排序,能删除选定行,增加一行,跳转到第一页、上一页、下一页、最后页,点击单元格可以修改...

    XCode IOS 在TableView中分段显示数据

    本教程将聚焦于如何在TableView中实现分段显示数据,适合初级开发者学习。 首先,理解UITableView的基本构成是关键。UITableView由多个单元格(UITableViewCell)组成,这些单元格可以在屏幕滚动时动态加载和卸载。...

    QML的TableView中实现数据以不同的形式进行表现-对每列进行自定义

    在`TableView`中,每个单元格都有一个对应的`delegate`,可以为每个列定制不同的显示样式。例如,第一列可能使用`DelegateComponent`来创建一个单选框,第二列用`ComboBox`显示,第三列则用`ProgressBar`来呈现进度...

    Qt 缩略图列表显示图片

    为了处理多个图片,你可以将以上步骤放在一个循环中,遍历所有图片文件,这样就可以生成一个包含所有图片缩略图的列表。例如,如果有一个名为"fileOpen"的文件列表,你可以这样做: ```cpp QStringList files = ...

    iOS TableView下拉图片放大

    - 压缩包中的"DemoTableController 2"可能是一个实现了上述功能的示例代码文件,它可能包含了创建TableView,设置Header View,监听滚动事件,以及处理图片放大效果的完整逻辑。通过查看和分析这个文件,可以更深入...

    IOS TableView点击更多,展开

    在提供的压缩包文件“tableView点击更多扩展”中,可能包含了实现这一功能的代码示例、资源文件或相关文档。通过查看这些文件,开发者可以更具体地了解实现细节和代码结构。在实际项目中,应根据项目需求和设计规范...

    ios tableview 异步 加载图片

    1. 使用占位图:在图片加载过程中显示占位图,提升用户体验。 2. 图片尺寸适配:根据cell大小裁剪或缩放图片,减少内存占用。 3. 缓存策略:合理设置内存和磁盘缓存策略,避免无谓的网络请求。 4. 避免重复下载:...

    ios-tableVIew点击展开.zip

    3. **处理点击事件**:在`tableView:didSelectRowAtIndexPath:`中,获取选中行的模型数据,切换`isExpanded`状态,并调用`reloadRowsAtIndexPaths:withRowAnimation:`刷新这行的显示。同时,可能还需要更新与其相邻...

    QT下Mingw实现QTtableview中实现添加复选框、按钮控件实例

    本实例将探讨如何在QTTableView中集成复选框和按钮控件,以增强用户界面的交互性。QTTableView是QT框架中的一个关键组件,它允许我们展示和操作表格数据。下面将详细讲解这一实现过程。 1. **QT与Mingw**: Mingw...

    ioS TableView下拉图片放大上拉图片高度缩小TableViewFrame动态变化

    在标题“iOS TableView下拉图片放大上拉图片高度缩小TableViewFrame动态变化”中,提到的是一个特定的交互效果,即当用户滚动TableView时,顶部图片的行为会有所改变:下拉时图片放大,上拉时图片高度缩小,同时整个...

    RunLoop优化tableView加载大量图片卡顿问题

    "RunLoop优化tableView加载大量图片卡顿问题"这一主题主要探讨如何利用RunLoop机制来改善这种状况,以实现流畅的滚动效果。 RunLoop是Objective-C中的一个核心概念,它是一个对象,用于管理线程的执行循环,保证...

    横屏的tableview使用方法

    在iOS开发中,Table View(简称tableView)是用于展示数据的一种常见控件,它能够以列表形式呈现信息。当我们需要在横屏模式下使用tableView时,可能会遇到一些不同于竖屏的挑战,比如布局调整、数据加载和显示等...

    IOS Tableview远程加载数据并显示

    本示例"IOS Tableview远程加载数据并显示"旨在教你如何从远程服务器获取数据,并将其动态地加载到UITableView中,为用户提供流畅的滚动体验。这个"tableviewdemo"压缩包文件很可能是包含了实现这一功能的代码示例。 ...

    iOS tableView点击更多 搜索栏

    在这个特定的场景中,我们关注的是一个增强型的tableView实现,它具有“点击更多”功能以及头部的搜索栏。这个设计模式通常用于提供用户更丰富的交互体验,让他们能够方便地筛选和查找列表中的内容。 首先,"点击更...

    iOS TableView 添加手势方法

    然而,在这种情况下,可能会遇到一个问题:当用户点击TableView中的Cell时,`UITableView`的`didSelectRowAtIndexPath`方法不再被调用。这是因为`UITapGestureRecognizer`拦截了触摸事件,使得TableView无法正确检测...

    TableViewSection展开隐藏

    `TableViewSection展开隐藏`是UITableView高级用法的一个实例,它允许用户通过点击某个Section头部来展开或隐藏该Section下的所有行。这样的交互设计可以有效地组织和管理大量信息,提高用户体验。 首先,我们要...

Global site tag (gtag.js) - Google Analytics