在动画帧更改后使用变换缩放UIView会导致UIView在缩放之前跳回原始帧

时间:2013-01-04 18:33:23

标签: objective-c ios uiviewanimation cgaffinetransform

我在移动它(带动画)后试图缩放UIView(带动画)。问题是,当缩放动画开始时,它会跳回到原始位置。为什么呢?

[UIView animateWithDuration:t delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
    // Drop the ball

    CGRect frame = coinView.frame;
    frame.origin.y += d;

    coinView.frame = frame;

    coinView.shouldSparkle = NO;
} completion:^(BOOL finished) {
    [UIView animateWithDuration:0.3 animations:^{
        // Initial scale up for ball "poof"

        coinView.transform = CGAffineTransformScale(coinView.transform, 1.5, 1.5);
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:0.3 animations:^{
            coinView.transform = CGAffineTransformScale(coinView.transform, 0.000001, 0.000001);
        } completion:^(BOOL finished) {
            [coinView removeFromSuperview];
        }];
    }];
}];

编辑:这就是我生成d:

的方式
static CGFloat groundPositionY = 325;

CGRect convertedFrame = [coinView.superview convertRect:coinView.frame toView:self.view];

CGFloat d = groundPositionY - CGRectGetMaxY(convertedFrame);

EDIT2:好的,所以我将第二个UIView动画更改为以下内容,我发现跳转(以及缩放 down )发生在第二个动画发生之前,即当animateWithDuration:delay:options :动画:完成:被称为。

[UIView animateWithDuration:5 delay:3 options:0 animations:^{
    coinView.transform = CGAffineTransformScale(coinView.transform, 1.5, 1.5);
} completion:nil];

2 个答案:

答案 0 :(得分:1)

我测试了你的代码,它对我来说很好。你怎么生成你的d?它究竟在哪个块上回来了?

答案 1 :(得分:0)

我发现了问题...

coinView是子视图控制器视图的子视图。问题来自于我覆盖了子视图控制器的viewDidLayoutSubviews方法以布置所有coinView,因此每当调用该方法时,硬币视图将移回其原始位置并且子视图控制器打算使用的大小。

感谢您的所有帮助,repoguy和塞尔吉奥!!