12

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 がセルをアニメーション化して動かしたい方法を知っている人はいますか?

(コレクション ビュー セルのサイズが変化する傾向があり、斜めの動きのない優雅なアニメーションが必要なため、これが必要です)。

4

2 に答える 2

8

これに対する答えは、中間レイアウトを使用することです。

[self.collectionView setCollectionViewLayout: layoutForStepOne animated:YES completion:^(BOOL finished) {
    [self.collectionView setCollectionViewLayout: layoutForStepTwo animated:YES completion:^(BOOL finished) {
        [self.collectionView setCollectionViewLayout: layoutForStepThree animated:YES];

    }];
}];
于 2013-09-27T15:03:34.537 に答える