在动画发生之前旋转UIView

时间:2012-02-02 22:39:58

标签: ios uiview cgaffinetransform catransform3d

我希望在用动画缩放之前旋转我的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];
}

1 个答案:

答案 0 :(得分: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);
                                          }
                          ];
                     }
                 }
    ];  

您可以使用“旧”动画样式,但实现动画委托等更复杂......