0

アニメーションでスケーリングする前に、UIView サブクラスのインスタンスを回転させたいと思います。残念ながら、私が持っているコードは同じアニメーションで回転およびスケーリングします。スケーリング アニメーションが発生する前に回転を完了または強制するにはどうすればよいですか?

- (void) layoutSubviews {
    self.transform = CGAffineTransformMakeRotation(myAngle);

    // other layout...
}

- (void) showMyView {
    [UIView setAnimationCurve:something];
    [UIView setAnimationDuration:somethingElse];

    self.layer.transform = CATransform3DMakeScale(x, y, z);

    [UIView commitAnimations];
}
4

1 に答える 1

3

まず第一に、Apple はアニメーションに Block 構文を使用することを推奨しています。
それに加えて、あなたが望むものを達成しやすくなります。

最初に回転のアニメーションを作成し、完了したらスケーリングを行います。
コード例:

    [UIView animateWithDuration:0.5 
                 animations:^{
                     // This rotates the layer by 90°
                     self.layer.transform = CGAffineTransformMakeRotation(M_PI/2.0);
                 }
                 // On completition start the scaling
                 completion:^(BOOL finished){
                     if (finished) {
                         [UIView animateWithDuration:0.5 
                                          animations:^{
                                              // This scales
                                              self.layer.transform = CGAffineTransformMakeScale(2.0, 2.0);
                                          }
                          ];
                     }
                 }
    ];  

使用している「古い」アニメーション スタイルでも可能ですが、アニメーション デリゲートなどを実装するのはより複雑です...

于 2012-02-02T23:50:14.110 に答える