[Ios] 在reloadItemsAtIndexPaths之後避免UICollectionView的動畫


Answers

值得注意的是,如果你的目標是iOS 7以上,你可以使用新的UIView方法performWithoutAnimation: 我懷疑,這是做的很像這裡的其他答案(暫時禁用UIView動畫/核心動畫操作)相同,但語法是很好,乾淨。

所以對於這個問題,特別是...

Objective-C的:

[UIView performWithoutAnimation:^{
    [self.collectionView reloadItemsAtIndexPaths:indexPaths];
}];


迅速:

UIView.performWithoutAnimation {
    self.collectionView.reloadItemsAtIndexPaths(indexPaths)
}


當然,這個原則可以適用於任何你想確保改變動畫的情況。

Question

UICollectionView在reloadItemsAtIndexPaths被調用(淡入淡出動畫)後動畫的項目。

有沒有辦法避免這個動畫?

iOS 6




這裡是一個Swift 3版本來執行沒有動畫到UICollectionView 。 我發現這比我的更好的工作比collectionView.reloadData()因為它減少插入記錄時的單元格交換。

func appendCollectionView(numberOfItems count: Int){

        // calculate indexes for the items to be added
        let firstIndex = dataItems.count - count
        let lastIndex = dataItems.count - 1

        var indexPaths = [IndexPath]()
        for index in firstIndex...lastIndex {
            let indexPath = IndexPath(item: index, section: 0)
            indexPaths.append(indexPath)
        }

   UIView.performWithoutAnimation {

        self.collectionView.performBatchUpdates({ () -> Void in
            self.collectionView.insertItems(at: indexPaths)
        }, completion: { (finished) -> Void in

        })
    }
}



- (void)reloadCollectionViewAnimated:(BOOL)animated  {

    if (animated) {
        [self.collectionView performBatchUpdates:^{
            [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
        } completion:^(BOOL finished) {

        }];
    } else {
        [CATransaction begin];
        [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
        [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
        [CATransaction commit];
    }

}