iOS中,如何在UICollectionView載入時使用動畫效果

先看一下效果:


QQ20180725-190614.gif

實現(xiàn)一個UICollectionView的每個Cell分別彈出的動畫效果.

需要注意:
· 如何獲取CollectionView中的每一個cell.
· 如何讓每個cell非同時地調(diào)用動畫.
· 調(diào)用動畫的方法的時機.

1.假設我們已經(jīng)寫好了動畫方法animateCollection.如何在CollectionView加載時調(diào)用動畫呢.

其實很簡單, 如下:

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self animateCollection];
}

此外, 如果有其他條件要調(diào)用動畫怎么辦呢?
那么,你可能要問了,,什么時候會調(diào)用呢...
比如下面這個例子,,,在reloaddata之后,重新展示新內(nèi)容,我們也想要有一次加載的過程來提高用戶體驗.


QQ20180725-191845.gif

在segment改變值的時候調(diào)用動畫方法,代碼如下

- (void)changeMode:(id)sender
{
    //增加layoutIfNeed的目的是讓animateCollection在reload完成之后再執(zhí)行
    [self->_collectionView reloadData];
    [self->_collectionView layoutIfNeeded];
    [self animateCollection];
}

特別注意,在reloadData和動畫方法中間一定要加上layoutIfNeeded方法,這樣才能確保,collectionView在數(shù)據(jù)全部重載之后再調(diào)用動畫方法.

2.再來看看動畫怎么實現(xiàn)吧.

直接上代碼

-(void)animateCollection{
    NSArray *cells = _collectionView.visibleCells;
    CGFloat collectionHeight = _collectionView.bounds.size.height;
    for (UICollectionViewCell *cell in cells.objectEnumerator) {
        cell.alpha = 1.0f;
        cell.transform = CGAffineTransformMakeTranslation(0, collectionHeight);
        NSUInteger index = [cells indexOfObject:cell];
        [UIView animateWithDuration:0.7f delay:0.05*index usingSpringWithDamping:0.8 initialSpringVelocity:0 options:0 animations:^{
            cell.transform =  CGAffineTransformMakeTranslation(0, 0);
        } completion:nil];
    }
}

具體實現(xiàn)代碼已經(jīng)表述的比較明白,就不贅述了...此外,讓cell動態(tài)消失的方法也類似

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容