iOS功能列表

1.弹幕:

https://github.com/zkfpk6/YGFlyCommentManager-Danmaku

2.瀑布流:

- (void)prepareLayout; 准备布局cell

先存储各列MaxY值

再循环执行 - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath,设置新的cell布局属性并存储

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;  改变cell布局属性

已知宽度,让代理根据实际内容计算高度返回,至此最新的size可得到,然后遍历MaxY数组,找出最短的是哪一列, 最后根据最短列 计算出X 、Y值,设置UICollectionViewLayoutAttributes的frame属性,并更新MaxY数组。

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect;返回所有的cell布局属性

返回所有cell的布局属性(prepareLayout中存储的)

- (CGSize)collectionViewContentSize;

设置ContentSize

计算出collectionView的contentSize(遍历MaxY数组找出最长列即可得到新的高度)。详细代码如下@interface RealityShowLayout ()/** 这个字典用来存储每一列最大的Y值(每一列的高度) */@property (nonatomic, strong) NSMutableDictionary *maxYDict;/** 存放所有的布局属性 */@property(nonatomic,strong)NSMutableArray *attributeArray;

@end@implementation RealityShowLayout

- (NSMutableDictionary *)maxYDict {     

     if (!_maxYDict) {   

             self.maxYDict = [[NSMutableDictionary alloc] init];

return _maxYDict;

}

- (NSMutableArray *)attributeArray {

  if (!_attributeArray) { 

      self.attributeArray = [[NSMutableArray alloc] init]; 

}

   return _attributeArray;

}

#pragma mark -初始化默认值

- (instancetype)init {

   if (self = [super init]) {

        self.columnMargin = 10;

        self.rowMargin = 10; 

       self.columnsCount = 2; 

      self.sectionInset = UIEdgeInsetsMake(0, 10, 10, 10);

}

     return self;

}

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds

{ return YES;}

- (void)prepareLayout {

  [super prepareLayout];  // 1.清空最大的Y值 

    for (int i = 0; i<2; i++) {

     NSString *column = [NSString stringWithFormat:@"%d", I];            self.maxYDict[column] = @(self.sectionInset.top); 

}

[self.attributeArray removeAllObjects]; // 总 item 数

  NSInteger count = [self.collectionView numberOfItemsInSection:0];

   for (int i = 0; i *)layoutAttributesForElementsInRect:(CGRect)rect {   

    return self.attributeArray;

}

// 计算ContentSize- (CGSize)collectionViewContentSize {    // 默认最大Y值在第0列    __block NSString *maxColumn = @"0";   

 [self.maxYDict enumerateKeysAndObjectsUsingBlock:^(NSString *column, NSNumber *maxY, BOOL *stop) {       

   if ([maxY floatValue] > [self.maxYDict[maxColumn] floatValue]) {         

               maxColumn = column;       

}    }];   

return CGSizeMake(0, [self.maxYDict[maxColumn] floatValue] + self.sectionInset.bottom);

}


- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {    // 1.计算尺寸    CGFloat width = (self.collectionView.frame.size.width - self.sectionInset.left - self.sectionInset.right - (self.columnsCount - 1) * self.columnMargin) / self.columnsCount;    // 代理计算传入高的值    CGFloat height = [self.delegate flowLayout:self heightForWidth:width atIndexPath:indexPath];    // 2.0假设最短的那一列的第0列    __block NSString *minColumn = @"0";    // 遍历字典找出最短的那一列    [self.maxYDict enumerateKeysAndObjectsUsingBlock:^(NSString *column, NSNumber *maxY, BOOL *stop) {        if ([maxY floatValue] < [self.maxYDict[minColumn] floatValue]) {                minColumn = column;        }    }];    // 2.1计算位置        CGFloat x = self.sectionInset.left + (self.columnMargin + width) * [minColumn intValue];        CGFloat y = [self.maxYDict[minColumn] floatValue]+ _rowMargin;        self.maxYDict[minColumn] = @(y + height);        // 3.创建属性        UICollectionViewLayoutAttributes *attrs = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];        attrs.frame = CGRectMake(x, y, width, height);      return attrs;}横向瀑布流原理一样........此处省略一万字

3.进度条

https://github.com/AliThink/HorizontalProgress

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容