iOS UICCollection Viewリフレッシュ時のフラッシュ画面の解決方法
1581 ワード
アルバムを作る時一つの問題に出会いました。つまりUICCollection Viewが更新する時に画面をフラッシュして、ネットで検索しました。解決方法も多いです。一つ一つ試したわけではないです。メモを取って、出会いの方法を見に来ます。
方法1:
方法2
上記の方法はUID ViewのAnimationしか解決できませんが、もしあなたのcellにはCALayerの動画が含まれていたら、例えばこのようにします。
方法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];
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。