资讯专栏INFORMATION COLUMN

[iOS]自定义UICollectionView 1--CollectionItem的实现

darkbug / 2789人阅读

摘要:要实现可以有许多方法可以使用,通过自定义来实现类似的布局样式,也可以通过完全重写来重新实现一遍有点重新造轮子的嫌疑。在实现文件中首先引入需要的头文件。接下来重写方法点击事件的实现通过手势来实现之后是可以由子类重写的方法

在iOS6.0之后的版本中水果加入了UICollectionView控件,但是UICollection并不支持iOS6.0之前的版本。要实现UICollectionView可以有许多方法:可以使用UITableView,通过自定义UITableViewCell来实现类似UICollectionView的布局样式,也可以通过完全重写UITableView来重新实现一遍(有点重新造轮子的嫌疑)。

这里我们选择后面一种方法来实现,这样可以充分的理解UITableview的重用机制以及其具体实现方式。首先在编码之前我们应该清楚我们需要什么:一个Collection容器与用来展示内容的CollectionItem。这时最基本的,由于在项目中需要用到上拉更多、下拉刷新以及headerView的功能所以还需要更多、刷新的View,在之后的计算过程中也需要考虑到headerView。

首先创建CollectionItem

#import 
#import 
@interface iCollectionItem : UIView
@property (strong,nonatomic) UIImageView *backgroundImage;
@property (strong,nonatomic) NSString *reuseIdentifier;
@property (assign,nonatomic) CGPoint point;
@property (strong,nonatomic) NSString *itemIdentifier;
-(id)initWithReuseIdentifier:(NSString *)identifier;
-(void)itemTaped;
-(void)reset;
@end

在Item的头文件中定义了背景ImageView、重用标志、用来指示位置的point属性,初始化事件、点击事件、重置方法、两个Item对比的方法。 在实现文件中首先引入需要的头文件。

#import "iCollectionItem.h"
#import "iCollectionView.h"
@interface iCollectionItem()
@property(strong,nonatomic) UITapGestureRecognizer *tapGR;
@end

初始化方法中对item进行初始化

-(id)initWithReuseIdentifier:(NSString *)identifier{
    self=[super init];
    if (self) {
        _reuseIdentifier=identifier;
        [self setUserInteractionEnabled:YES];
        _backgroundImage= [[UIImageView alloc] init];
        _tapGR=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(itemTaped)];
    }
    return self;
}

然后重写setFrame方法:

-(void)setFrame:(CGRect)frame {
    [super setFrame:frame];
    [_backgroundImage setFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    _backgroundImage.tag=10099;
}

这样使得item在改变大小时背景能够一样进行变化。接下来重写layoutSubviews方法

-(void)layoutSubviews {
    [super layoutSubviews];
    if([self viewWithTag:10099]== nil)   {
        [self addSubview:_backgroundImage];
        [self sendSubviewToBack:_backgroundImage];
    }
    [self addGestureRecognizer:_tapGR];
}

点击事件的实现通过手势来实现:

-(void)itemTaped{
    [(iCollectionView *)[self superview] itemClickedAtPoint:self.point];
}

之后是可以由子类重写的方法

#pragma mark -
#pragma mark override
-(void)reset{
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15385.html

相关文章

  • [分享]iOS开发-UICollectionViewCell 布局

    摘要:定义每个的大小定义每个的将加到上的效果设定没个小单元格大小,图中就是指每个小图设定整个的行间距上下左右边距设定中没个小单元的间距,如图中图片与图片的间距,动态计算的话,需要这三个协议都实现代码宽度自适应屏幕注意,每一个之间是 //定义每个Item 的大小 -(CGSize)collectionView:(UICollectionView *)collectionView layou...

    ysl_unh 评论0 收藏0
  • iOS-UICollectionView快速构造/拖拽重排/轮播实现介绍

    摘要:目录的定义快速构建网格视图拖拽重排处理实现简单轮播的定义同一样,是中最常用到数据展示视图。拖拽重排的触发,一般都是通过长按手势触发。笔者简书地址快速构造拖拽重排轮播实 目录 UICollectionView的定义 UICollectionView快速构建GridView网格视图 UICollectionView拖拽重排处理(iOS8.x-/iOS9.x+) UICollect...

    moven_j 评论0 收藏0
  • [iOS]定义UICollectionView 2-1--CollectionView实现(定义

    摘要:我厂广招各路大神加入可以发简历到接下来就是主要的的实现。首先是头文件的实现,先定义一个用来区分状态的枚举然后定义与定义废弃不用方法用来响应的点击手势,方法用来重新加载,方法用来根据获取对象。 我厂广招各路大神加入:job.koudaitong.com 可以发简历到 tianchi@qima-inc.com O(∩_∩)O~ 接下来就是主要的CollectionView的实现。首先是头...

    YuboonaZhang 评论0 收藏0
  • iOS 」可拖拽Cell

    摘要:现在很多项目都会用到类似拖动的效果,比如今日头条和网易新闻之类的资讯类产品,都有用该技术设置模块顺序的操作。在之后,苹果提供相关的方法,非常方便。 现在很多项目都会用到类似拖动的效果,比如今日头条和网易新闻之类的资讯类产品,都有用该技术设置模块顺序的操作。 在iOS9.0之后,苹果提供相关的方法,非常方便。 设定三个私有属性 @property(nonatomic,strong) NS...

    nihao 评论0 收藏0
  • UITableView和UICollectionView流畅滚动

    摘要:以及被设计用来支持展示能滚动的数据集。,因为的完全可自定义,提供了最大程度上的灵活性。基础方式是为需要显示的的每个属性创建出口,并通过来初始化。然而,文章中基础原则仍然适用。 As most iOS developers know, displaying sets of data is a rather common task in building a mobile app. App...

    Loong_T 评论0 收藏0

发表评论

0条评论

darkbug

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<