0

カードを裏返してから裏返す必要があります。問題なくそれを行うコードを書きました。問題は、ユーザーがこのカードを好きなだけ前後にめくることができ、その効果が累積されるように見えることです。2 回目の試行で、カードはこまのように回転します。ビューからアニメーションをクリアする方法ではなく、アニメーションを追加する方法しかないように見えるので、私は完全に驚いていません。以前にコミットしたアニメーションの UIView を「再設定」する方法はありますか? それをキャプチャして、新しいものをコミットせずに再利用する方法はありますか? それとも、明らかな何かが欠けていますか?これは私のコードです:

if (self.flipped) {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                           forView:self
                             cache:YES];
    [imageView removeFromSuperview];
    [UIView commitAnimations];
    self.flipped = NO;
} else {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
                           forView:self
                             cache:YES];
    [self addSubview:imageView];
    [UIView commitAnimations];
    self.flipped = YES;
}

読んでくれてありがとう。

4

2 に答える 2

1

進行中のすべてのアニメーションをキャンセルするには:

#import <QuartzCore/QuartzCore.h>

...

[view.layer removeAllAnimations];

既存のアニメーションがある場合は強制終了し、ビューが現在ある場所から移動を開始する新しいアニメーションを開始するには、これが必要だと思います。

[UIView beginAnimations:nil context:nil];
[UIView setAnimationBeginsFromCurrentState:YES];

... and the rest of it ...

[UIView commitAnimations];

うまくいけば、そのうちの1つがあなたの問題を解決します。

于 2011-05-20T15:51:54.583 に答える
0

あなたの「自己」が何であれ、それを foo と呼ばれる包含ビューに入れてから、setAnimation... 行を次のように変更します。

    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
                       forView:foo
                         cache:YES];
于 2011-05-20T15:48:38.377 に答える