iOS骨架屏框架--->TABAnimated 使用文檔

iOS骨架屏框架--->TABAnimated 使用文檔

參考信息:

GitHub源碼+開(kāi)發(fā)文檔: https://github.com/tigerAndBull/TABAnimated

一惭适、基本思想

1.基本 骨架屏控制 對(duì)象
  • 普通視圖控制:TABViewAnimated
  • tableView控制:TABTableAnimated
  • collectioinView控制:TABCollectionAnimated
2.調(diào)用流程

// 控制視圖初始化
TABViewAnimated *viewAnimated = [TABViewAnimated new];
view.tabAnimated = viewAnimated;

// 精細(xì)化控制 骨架屏動(dòng)畫(huà)
// [TABAnimated sharedAnimated].openAnimationTag = YES; // 打開(kāi)動(dòng)畫(huà)標(biāo)記(用于動(dòng)態(tài)調(diào)試和測(cè)試)
viewAnimated.adjustBlock = ^(TABComponentManager * _Nonnull manager) {
     // animationTag 動(dòng)畫(huà)標(biāo)記 (0就轧、1明刷、2...猴凹,根據(jù)視圖被添加addSubView的順序決定崔列,可通過(guò) openAnimationTag 打開(kāi)查看
     manager.animation(animationTag).radius(5).width(100);
     manager.animation(1).radius(5);
     manager.animation(2).radius(5);
};

// 開(kāi)啟動(dòng)畫(huà)(加載數(shù)據(jù)時(shí))
[view tab_startAnimation];  

// 停止動(dòng)畫(huà)(數(shù)據(jù)加載完畢時(shí))
[view tab_endAnimation];

二秆吵、框架集成

1.CocoPods集成:

pod ‘TABAnimated’

2.手動(dòng)集成:

TABAnimated框架源碼文件加 拖入項(xiàng)目工程中

三缸榄、基本使用

0.框架初始化

在AppDelegate代理方法didFinishLaunchingWithOptions 方法中加入框架初始化代碼:

[[TABAnimated sharedAnimated] initWithOnlySkeleton];

[TABAnimated sharedAnimated].openLog = YES;

1.普通內(nèi)容視圖

基本使用流程類(lèi)似MJRefresh:

  • 引入相關(guān)頭文件: #import ‘TABAnimated.h’;
  • 構(gòu)建UI結(jié)構(gòu)和基本布局;
  • 配置需生成骨架屏所在View的骨架屏拓展屬性tabAnimated(是一個(gè)TABViewAnimated對(duì)象) 捞附,使用該View 調(diào)用tab_startAnimationWithCompletion:拓展方法,來(lái)開(kāi)啟骨架屏動(dòng)畫(huà)纠修,在參數(shù)Block中 調(diào)用數(shù)據(jù)加載方法;
  • 數(shù)據(jù)加載和處理完畢后涩堤,調(diào)用骨架屏所在View的tab_endAnimationEaseOut拓展方法停止動(dòng)畫(huà)并展示數(shù)據(jù)。

????????以上為簡(jiǎn)易使用的基本流程分瘾,中間的動(dòng)畫(huà)效果由框架根據(jù)動(dòng)畫(huà)配置信息默認(rèn)生成胎围。具體參考代碼如下:

    
- (void)viewDidLoad {
    [super viewDidLoad];

    // 構(gòu)建基本UI
    [self setupUI];
    
    // 配置骨架動(dòng)畫(huà)信息
    TABViewAnimated *viewAnimated = [TABViewAnimated new];
    self.view.tabAnimated = viewAnimated;
    
    // 精細(xì)化配置
    [TABAnimated sharedAnimated].openAnimationTag = YES;
    viewAnimated.adjustBlock = ^(TABComponentManager * _Nonnull manager) {
         // manager.animation(0).radius(kScreenWidth/5.0/2.0);
         manager.animation(1).radius(5);
         manager.animation(2).radius(5);
    };

    // 啟動(dòng)動(dòng)畫(huà)(默認(rèn)延遲時(shí)間0.4s)
    [self.view tab_startAnimationWithCompletion:^{
        // 請(qǐng)求數(shù)據(jù)
        // ...
        // 獲得數(shù)據(jù)吁系,數(shù)據(jù)處理
        // ...
        [self loadData];
    }];
    
}

- (void)loadData {
    
    // 發(fā)送網(wǎng)絡(luò)請(qǐng)求
    // ....
    
    /*** 請(qǐng)求成功后, 回到主線(xiàn)程***/
    // 停止骨架動(dòng)畫(huà)
    [self.view tab_endAnimationEaseOut];
    
    // 展示數(shù)據(jù)
    [self showMsgToUI];
}

2.列表視圖用法(UITableView)

????????列表視圖(tableView)的骨架動(dòng)畫(huà)拓展屬性tabAnimated,通過(guò)TABTableAnimated以一個(gè)Cell類(lèi)模版和固定高度來(lái)生成(即TABTableAnimated的animatedWithCellClass:cellHeight方法)白魂,后面同樣調(diào)用視圖 拓展tab_startAnimationWithCompletion: 來(lái)開(kāi)啟動(dòng)畫(huà)汽纤,并在completionBlock參數(shù)中請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù), 數(shù)據(jù)請(qǐng)求完成后調(diào)用 視圖的tab_endAnimationEaseOut 方法來(lái)結(jié)束動(dòng)畫(huà)和展示數(shù)據(jù);

注意事項(xiàng):

tableView的 tableViewHeader福荸、tableViewFooter如需參與骨架屏生成蕴坪,需要單獨(dú)開(kāi)啟:

tableView.tabAnimated.showTableHeaderView = YES;

tableView.tabAnimated.showTableFooterView = YES;

基本參考代碼如下:


- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 初始化數(shù)據(jù)容器
    self.dataArr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
    
    // 構(gòu)建UI
    [self setupUI];
    
    // 配置骨架屏動(dòng)畫(huà)信息
    self.tableView.tabAnimated = [TABTableAnimated animatedWithCellClass:[WZSkeletonTableCell class] cellHeight:160];

    // 精細(xì)化動(dòng)畫(huà)控制
    // [TABAnimated sharedAnimated].openAnimationTag = YES; // 動(dòng)畫(huà)元素標(biāo)記
    self.tableView.tabAnimated.adjustBlock = ^(TABComponentManager * _Nonnull manager) {
        manager.animation(0).radius(30);
        manager.animation(1).radius(5).height(15).width(100);
        manager.animation(2).radius(5).height(15).width(100);
        manager.animation(3).radius(5);
        manager.animation(4).radius(5);
    };
    
    // 啟動(dòng)動(dòng)畫(huà)
    [self.tableView tab_startAnimationWithCompletion:^{
        // 請(qǐng)求數(shù)據(jù)
        // ...
        // 獲得數(shù)據(jù)
        // ...
        [self loadData];
    }];
}

- (void)loadData {
    
    // 加載 和 處理數(shù)據(jù)(*此處為數(shù)據(jù)加載模擬)
    NSMutableArray *dataList = [NSMutableArray array];
    NSInteger startIndex =  [[self.dataArr lastObject] intValue];
    for (NSInteger i = startIndex; i < startIndex+10; i ++) {
        [dataList addObject:[@(i) stringValue]];
    }
    [self.dataArr addObjectsFromArray:dataList];
        
    // 停止動(dòng)畫(huà),并刷新數(shù)據(jù)(回到主線(xiàn)程)
    [self.tableView tab_endAnimationEaseOut];
    
    // 刷新視圖
    [self.tableView reloadData];
}

3.集合視圖(UICollectionView)

????????集合視圖(collectionView)的骨架動(dòng)畫(huà)拓展屬性tabAnimated,通過(guò)TABCollectionAnimated以及一個(gè)UICollectionViewCell類(lèi)(模版)和固定size來(lái)生成(即調(diào)用TABCollectionAnimated的animatedWithCellClass:cellSize:方法),后面同樣調(diào)用視圖 拓展方法(tab_startAnimationWithCompletion: )來(lái)開(kāi)啟動(dòng)畫(huà)敬锐,并在completionBlock參數(shù)中請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)背传, 數(shù)據(jù)請(qǐng)求完成后調(diào)用 視圖的拓展方法(tab_endAnimationEaseOut)方法來(lái)結(jié)束動(dòng)畫(huà)和展示數(shù)據(jù);

    
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 初始化數(shù)據(jù)容器
    self.dataArr = [NSMutableArray arrayWithObjects:@"1",@"2",@"3", nil];
    
    // 構(gòu)建UI
    [self setupUI];
    
    // 配置骨架屏動(dòng)畫(huà)信息
    self.collectionView.tabAnimated = [TABCollectionAnimated animatedWithCellClass:[WZSkeletionCollectionCell class] cellSize:CGSizeMake((kScreenWidth-5)/2, (kScreenWidth-5)/2)];
    
    // 內(nèi)部子控件 動(dòng)畫(huà)精細(xì)化控制
    [TABAnimated sharedAnimated].openAnimationTag = YES;
    self.collectionView.tabAnimated.adjustBlock = ^(TABComponentManager * _Nonnull manager) {
        manager.animation(1).width(30).radius(5);
        manager.animation(2).radius(5);
        manager.animation(3).radius(5);
        manager.animation(4).radius(5);
    };

    // 啟動(dòng)動(dòng)畫(huà)
    [self.collectionView tab_startAnimationWithCompletion:^{
        // 請(qǐng)求數(shù)據(jù)
        // ...
        // 獲得數(shù)據(jù)
        // ...
        [self loadData];
    }];
    
}

- (void)loadData {
    
    // 請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)(*此處為數(shù)據(jù)加載模擬)
    NSMutableArray *dataList = [NSMutableArray array];
    NSInteger startIndex =  [[self.dataArr lastObject] intValue];
    for (NSInteger i = startIndex; i < startIndex+10; i ++) {
        [dataList addObject:[@(i) stringValue]];
    }
    [self.dataArr addObjectsFromArray:dataList];
        
    /*** 數(shù)據(jù)請(qǐng)求和處理完畢后,回到主線(xiàn)程***/
    // 停止動(dòng)畫(huà)
    [self.collectionView tab_endAnimationEaseOut];
    
    // 展示刷新數(shù)據(jù)
    [self.collectionView reloadData];
}

四台夺、高級(jí)使用

1.tableView多個(gè)Section径玖,每個(gè)Section下的Cell樣式各不相同

2.tableView多個(gè)Section,每個(gè)Section和Cell樣式都不同
        
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颤介,一起剝皮案震驚了整個(gè)濱河市梳星,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滚朵,老刑警劉巖冤灾,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辕近,居然都是意外死亡韵吨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)移宅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)学赛,“玉大人,你說(shuō)我怎么就攤上這事吞杭≌到剑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵芽狗,是天一觀的道長(zhǎng)绢掰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)童擎,這世上最難降的妖魔是什么滴劲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮顾复,結(jié)果婚禮上班挖,老公的妹妹穿的比我還像新娘。我一直安慰自己芯砸,他們只是感情好萧芙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布给梅。 她就那樣靜靜地躺著,像睡著了一般双揪。 火紅的嫁衣襯著肌膚如雪动羽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天渔期,我揣著相機(jī)與錄音运吓,去河邊找鬼。 笑死疯趟,一個(gè)胖子當(dāng)著我的面吹牛拘哨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播信峻,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼倦青,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了站欺?” 一聲冷哼從身側(cè)響起姨夹,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纤垂,失蹤者是張志新(化名)和其女友劉穎矾策,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體峭沦,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贾虽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吼鱼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓬豁。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖菇肃,靈堂內(nèi)的尸體忽然破棺而出地粪,到底是詐尸還是另有隱情,我是刑警寧澤琐谤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布蟆技,位于F島的核電站,受9級(jí)特大地震影響斗忌,放射性物質(zhì)發(fā)生泄漏质礼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一织阳、第九天 我趴在偏房一處隱蔽的房頂上張望眶蕉。 院中可真熱鬧,春花似錦唧躲、人聲如沸造挽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)刽宪。三九已至厘贼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圣拄,已是汗流浹背嘴秸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庇谆,地道東北人岳掐。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像饭耳,于是被迫代替她去往敵國(guó)和親串述。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345