iOS UICCollection Viewリフレッシュ時のフラッシュ画面の解決方法


アルバムを作る時一つの問題に出会いました。つまりUICCollection Viewが更新する時に画面をフラッシュして、ネットで検索しました。解決方法も多いです。一つ一つ試したわけではないです。メモを取って、出会いの方法を見に来ます。
方法1:

[UIView performWithoutAnimation:^{ 
   //     
    [self.collectionView reloadData]; 
 }]; 
このBLockにリフレッシュインターフェースのイベントを置いてもいいです。
方法2

[UIView animateWithDuration:0 animations:^{ 
  [collectionView performBatchUpdates:^{ 
    [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]]; 
  } completion:nil]; 
}]; 
方法3

[UIView setAnimationsEnabled:NO]; 
[self.trackPanel performBatchUpdates:^{ 
  [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]]; 
} completion:^(BOOL finished) { 
  [UIView setAnimationsEnabled:YES]; 
}]; 
あなたのアプリがiOS 7+だけの場合は、最初の方式のperformWithout Animationを使うのが簡単で便利です。
上記の方法はUID ViewのAnimationしか解決できませんが、もしあなたのcellにはCALayerの動画が含まれていたら、例えばこのようにします。

- (void)layoutSubviews{
  [super layoutSubviews];
  
  self.frameLayer.frame = self.frameView.bounds;
}
上記の場合はカスタムコントロールでlayer.markを使用している場合が多いですが、このような場合は、CALayerのアニメーションはキャンセルできません。解決方法も簡単です。

- (void)layoutSubviews{
  [super layoutSubviews];
  
  [CATransaction begin];
  [CATransaction setDisableActions:YES];
  
  self.frameLayer.frame = self.frameView.bounds;
  
  [CATransaction commit];  
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。