原生骨架庫模版功能上線,零耦合。

前言

前文章地址ios

首先,原有的骨架庫實現的大概思路: 若是你開啓了動畫, 框架會根據view內的全部subViews的位置,映射出一組如出一轍的CALayer動畫,並進行管理。git

目錄

  • 技術瓶頸
  • 模版功能 - 展現
  • 模版功能 - 使用方式
  • 模版功能 - 其餘細節

技術瓶頸

  1. 若是使用約束進行佈局,例如知名的第三方庫Masonry佈局,大部分只須要2個約束就能夠很好地佈局, 可是, 2個約束就能夠很好地佈局是在數據已經填充的狀況下,若是沒有數據,則位置信息是徹底不對github

  2. 本框架採用的是AOP編程,最初地思想是開發者儘可能不須要動本身原有的代碼,就能夠完成動畫的設置。 可是,當你使用後會發現,會於原代碼產生必定耦合,不會利於他人閱讀和維護。編程

  3. 咱們將骨架展現給用戶時,大部分狀況是這樣的:數組

  • 可能並不須要很複雜的view,徹底展現給用戶
  • 多是很個性化的view(由於映射出的動畫,並不能保證好看,又須要調試)
  • 多是通用的view,不少地方共用一個就好了

那麼模版功能特別適合你。bash

模版功能 - 展現

template.gif

交流羣

TABAniamted交流羣:304543771 提出你的意見框架

模版功能 - 使用方式

模版功能是庫的一個新功能,並非一個新的庫。佈局

  1. 模版功能只針對經常使用的表格組件。
  2. 開啓和結束動畫的方式不變
  3. 惟一的改變就是在表格初始化的時候,註冊模版,以下
- (UICollectionView *)collectionView {
    if (!_collectionView) {
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, kNavigationHeight, kScreenWidth, kScreenHeight-kNavigationHeight)            collectionViewLayout:layout];
        _collectionView.backgroundColor = [UIColor whiteColor];
        _collectionView.dataSource = self;
        _collectionView.delegate = self;
        _collectionView.animatedDelegate = self;             
        _collectionView.showsHorizontalScrollIndicator = NO;
        _collectionView.showsVerticalScrollIndicator = NO;
        
        // 註冊模版
        [_collectionView registerTemplateClassArray:@[[TemplateCollectionViewCell class],
                                                      [TemplateSecondCollectionViewCell class]]];

    }
    return _collectionView;
}

複製代碼

模版功能 - 其餘細節

  1. cell模版須要本身寫,佈局寫死,想什麼樣就什麼樣 但須要繼承自TABBaseCollectionViewCellTABBaseTableViewCell
  2. 以table舉例,TABBaseTableViewCell中的cellHeight方法, 須要你在子類重寫,並指定數值, 這個返回值就是改模版在動畫是展現的高度
+ (NSNumber *)cellHeight {
    return [NSNumber numberWithFloat:10+headImgWidth+5+80+10+imgWidth];
}
複製代碼
  1. 模版功能依舊根據animationType設置動畫類型
  2. 使用isUseTemplate屬性切換爲模版模式, 能夠在動畫開啓前隨意切換。
  3. 模版中的組件,使用經典類型的動畫,依舊須要指定動畫類型
  4. 提供兩種方式註冊模版,一個section和多section, 多個section是以一個class數組形式儲存。 言外之意,數組中的模版類和section一一對應。
- (void)registerTemplateClassArray:(NSArray <Class> *)classArray;
複製代碼

最後

  • 若有問題,加入交流羣:304543771
  • github地址:https://github.com/tigerAndBull/LoadAnimatedDemo-ios
相關文章
相關標籤/搜索