0

一連のレイヤーが配置され、単一の「アクティブ化された」レイヤー(基本的にユーザーがクリックしたレイヤー)が同時に配置およびサイズ変更される方法があります。アクティブ化されたレイヤーを含むすべてのレイヤーは、より大きなレイヤーのサブレイヤーです。これが私の方法です:

    [CATransaction begin];
    [CATransaction setValue:[NSNumber numberWithFloat:0.7]
                     forKey:kCATransactionAnimationDuration];
    }];
    for (CALayer *layer in self.inactiveLayers) {
       ... do some positioning ...
    }
    CGRect newFrame = activeLayer.frame;
    newFrame.origin.x = 50.0;
    newFrame.origin.y = 50.0;
    newFrame.size.width = 100.0;
    newFrame.size.height = 100.0;
    activeLayer.frame = newFrame;
    [CATransaction commit];

私が経験している問題は本当に奇妙です。上記のコードを使用すると、アニメーションは実行されません (非アクティブなレイヤーのアニメーションも実行されません)。しかし、新しいフレームのサイズと幅を設定する行をコメントアウトするとすぐに、魔法のようにアニメーションが再び機能し始めます。

これが起こるべき理由はありますか?

4

2 に答える 2

1

問題を把握し、アニメーション化しようとしていたレイヤーのスーパーレイヤーにレイアウトマネージャーを設定し、レイヤーの境界が変更されたときにレイアウトコード(レイヤーのサイズをリセットする)が呼び出されていました。アニメーションの実行中にレイアウト マネージャーを無効にすると、問題が解決しました。

于 2010-12-18T01:09:03.523 に答える
0

これは、CAlayer のフレーム プロパティがアニメーション化できないためです。代わりに境界プロパティを使用すると、位置アニメーションが問題なく実行されます。

于 2010-12-17T15:41:54.637 に答える