你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> Tips:取消UICollectionView的隱式動畫

Tips:取消UICollectionView的隱式動畫

編輯:IOS開發基礎

1.jpg

作者:裡脊串 授權本站轉載。

UICollectionView在reloadItems的時候,默認會附加一個隱式的fade動畫,有時候很討厭,尤其是當你的cell是復合cell的情況下(比如cell使用到了UIStackView)。

下面幾種方法都可以幫你去除這些動畫

//方法一
[UIView performWithoutAnimation:^{
    [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
}];
//方法二
[UIView animateWithDuration:0 animations:^{
    [collectionView performBatchUpdates:^{
        [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
    } completion:nil];
}];
    
//方法三
[UIView setAnimationsEnabled:NO];
[self.trackPanel performBatchUpdates:^{
    [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];
} completion:^(BOOL finished) {
    [UIView setAnimationsEnabled:YES];
}];

如果你的APP只支持iOS7+ 推薦使用第一種方式performWithoutAnimation(感謝@sunnyxx的tip) 簡單方便

but

問題還沒有結束 上面介紹的方法只能解決UIView的Animation 如果你的cell中還包含有CALayer的動畫 比如這樣

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    self.frameLayer.frame = self.frameView.bounds;
}

上述情況多用於自定義控件使用了layer.mask的情況 如果有這種情況 上面提到的方法是無法取消CALayer的動畫的 但是解決辦法也很簡單

- (void)layoutSubviews
{
    [super layoutSubviews];
    
    [CATransaction begin];
    [CATransaction setDisableActions:YES];
    
    self.frameLayer.frame = self.frameView.bounds;
    
    [CATransaction commit];
    
}

done!


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved