UICollectionViewLayout
セルを円に配置するサブクラスがあります。YES
呼び出しのレイアウトが返されますshouldInvalidateLayoutForBoundsChange:
。回転すると、最初の位置にあるセルがフェードアウトし、最後の位置にあるセルがフェードインします。
レイアウトに次のコードを追加することで、フェードを無効にすることができ、アイテムの円が向きの変化に合わせて単純に回転するように見えます。
- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
return nil;
}
- (UICollectionViewLayoutAttributes *)finalLayoutAttributesForDisappearingItemAtIndexPath:(NSIndexPath *)itemIndexPath {
return [self layoutAttributesForItemAtIndexPath:itemIndexPath];
}
ドキュメントではメソッドが呼び出されることを示唆していないように見えるため、境界の変更でメソッドが呼び出されるのはなぜですか? ドキュメントには、コレクション ビューからのアイテムの挿入と削除に関連して呼び出されると記載されているようです。
回転中にクロスフェードを無効にするより良い方法はありますか?
ノート:
initialLayoutAttributesForAppearingItemAtIndexPath:
ドキュメントには、デフォルトでメソッドは戻りますが、返された非 nil 値nil
を呼び出すと記載されています。super
UICollectionView
メソッドdeleteItemsAtIndexPaths:
にシンボリックブレークポイントを設定しましたが、ローテーション中にヒットするものはありませんmoveItemAtIndexPath:toIndexPath:
。insertItemsAtIndexPaths: