iOS图片浏览器

作者: 微末凡尘_ | 来源:发表于2016-11-25 00:05 被阅读375次

    效果图

    PhotoBrowse.gif

    核心代码

    横向滚动TableView

    - (void)p_initContentTableView {
        
        _contentTableView = [[UITableView alloc] init];
        _contentTableView.showsVerticalScrollIndicator = NO;
        _contentTableView.showsHorizontalScrollIndicator = NO;
        _contentTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
        _contentTableView.delegate = self;
        _contentTableView.transform = CGAffineTransformMakeRotation(-M_PI / 2);
        [self p_creatDataSource];
        [self addSubview:_contentTableView];
        [_contentTableView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.center.equalTo(self);
            make.height.equalTo(self.mas_width);
            make.width.equalTo(self.mas_height);
        }];
    }
    
    cell.transform = CGAffineTransformMakeRotation(M_PI / 2);
    

    1、TableView逆时针旋转90度,其宽度等于容器的高度,高度等于容器的宽度。
    2、Cell顺时针旋转90度。

    分离DataSource

    typedef void (^TableViewCellConfigureBlock)(id cell, id item, NSIndexPath *indexPath);
    
    @interface PJPhotoBrowseDataSource : NSObject <UITableViewDataSource>
    
    - (id)initWithItems:(NSArray *)anItems
         cellIdentifier:(NSString *)aCellIdentifier
     configureCellBlock:(TableViewCellConfigureBlock)aConfigureCellBlock;
    
    - (id)itemAtIndexPath:(NSIndexPath *)indexPath;
    
    @end
    
    - (void)p_creatDataSource {
        
        _dataSource = [[PJPhotoBrowseDataSource alloc] initWithItems:_dataArray cellIdentifier:kcellIdentifier configureCellBlock:^(PJPhotoBrowseCell *cell, NSString *item, NSIndexPath *indexPath) {
            cell.photoName = item;
            cell.transform = CGAffineTransformMakeRotation(M_PI / 2);
            
            if (indexPath == _initialIndexPath || cell.selected) {
                _initialIndexPath = nil;
                [cell showScrollBar:YES];
            } else {
                [cell showScrollBar:NO];
            }
        }];
        
        _contentTableView.dataSource = _dataSource;
    }
    

    其他TableView小技巧

    去除多余分割线

    _tableView.tableFooterView = [[UIView alloc] init];
    

    小tips

    1、cellForRowAtIndexPath方法只能获取可见的Cell,不可见的将获取为nil。
    2、可见的Cell存储在数组visibleCells中。
    3、selectRowAtIndexPath: animated:scrollPosition:方法不触发
    tableView:willSelectRowAtIndexPath:和tableView:didSelectRowAtIndexPath:
    4、Cell的selected状态会被存储下来。

    Demo地址

    https://github.com/codelyw/iOSDemo

    参考

    https://www.objccn.io/issue-1-1/

    推荐阅读

    构建TableView
    https://www.mikeash.com/pyblog/friday-qa-2013-02-22-lets-build-uitableview.html

    相关文章

      网友评论

        本文标题:iOS图片浏览器

        本文链接:https://www.haomeiwen.com/subject/nvjipttx.html