UICollectionView プログラミング ガイドには次のように書かれています。
挿入、削除、および移動操作のアニメーション化に加えて、いつでもレイアウトを無効にして、コンテンツを強制的に再描画することができます。レイアウトを無効にしても、アイテムは直接アニメーション化されません。レイアウトを無効にすると、コレクション ビューはアイテムをアニメーションなしで新しく計算された位置に表示します。ただし、レイアウトを無効にする行為により、レイアウト オブジェクトは項目を明示的に移動します。カスタム レイアウトでは、この動作を使用してセルを一定の間隔で配置し、アニメーション効果を作成できます。
私はこのようなことを試みてきました.3段階のアニメーションでタイルの位置を条件付きで設定するためAnimationStep
に私のサブクラスで使用される列挙型です:UICollectionViewFlowLayout
-(void)update{
[self animateLayoutAfterDelay:2.0 toStep:AnimationStepOne];
[self animateLayoutAfterDelay:4.0 toStep:AnimationStepTwo];
[self animateLayoutAfterDelay:6.0 toStep:AnimationStepThree];
}
-(void)animateLayoutAfterDelay:(NSTimeInterval)delay toStep:(MagazineLayoutAnimationStep)step {
double delayInSeconds = delay;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[UIView animateWithDuration:2.0 animations:^{
self.layout.animationStep = step;
[self.layout invalidateLayout];
}];
});
}
これには、まったく予測できない影響があります。期待どおりにアニメーション化するセルもあれば、非表示にして表示したり、新しい場所に表示されるだけのセルもあります。セルにランダムな背景色を付けて、これが UICollectionView リサイクル セルの効果であるかどうかを確認しました。これは奇妙さの一部を説明していますが、すべてではありません。
Apple がセルをアニメーション化して動かしたい方法を知っている人はいますか?
(コレクション ビュー セルのサイズが変化する傾向があり、斜めの動きのない優雅なアニメーションが必要なため、これが必要です)。