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

首先,苹果建议对动画内容使用 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 回答