0

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: わかりましたので、2 番目の UIView アニメーションを次のように変更しました。2 番目のアニメーションが発生する前、つまり animateWithDuration:delay:options:animations:completion: が呼び出されたときに、ジャンプ (およびスケールダウン) が発生することがわかりました。

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

2 に答える 2

1

私はあなたのコードをテストしましたが、うまくいきました。d をどのように生成しますか? そして、正確にどのブロックに戻りますか?

于 2013-01-04T18:59:26.073 に答える
0

問題を見つけました...

coinViewは、子ビューコントローラのビューのサブビューです。問題は、その子ビューコントローラーのviewDidLayoutSubviewsメソッドをオーバーライドしてすべての'をレイアウトしたcoinViewため、そのメソッドが呼び出されるたびに、コインビューが子ビューコントローラーによって意図された元の位置とサイズに戻るという事実に起因します。

助けてくれてありがとう、repoguyとsergio !!

于 2013-01-04T21:13:10.097 に答える