私はこの問題の解決策を実装することができましたが、コードはかなり非効率的であるように見え、実際には、ユーザーが別の画面に移動した場合に遅延メソッド呼び出しが発生し続けると、少し面倒です。
基本的には、キャラクターの頭から吹き出しをアニメーションで表示したいので、小さな泡が表示され、その後に大きな泡、さらに大きな泡、そして最終的に小さなアニメーションを含むメインの泡が表示されます。各バブルを独自のメソッドで表示し、遅延を使用してメソッドを呼び出すことでこれを管理しました。
- (void)showMood {
animating = TRUE;
[self showBubble1];
}
- (void)showBubble1 {
bubble1.hidden = FALSE;
[self performSelector:@selector(showBubble2) withObject:nil afterDelay:kBubbleDelay];
}
- (void)showBubble2 {
bubble2.hidden = FALSE;
[self performSelector:@selector(showBubble3) withObject:nil afterDelay:kBubbleDelay];
}
- (void)showBubble3 {
bubble3.hidden = FALSE;
[self performSelector:@selector(showThoughtBubble) withObject:nil afterDelay:kBubbleDelay];
}
- (void)showThoughtBubble {
thoughtBubble.hidden = FALSE;
[self startBubbleAnimations];
[self performSelector:@selector(hideThoughtBubble) withObject:nil
afterDelay:kAnimationDuration * kAnimationRepeatCount];
}
- (void)hideThoughtBubble {
bubble1.hidden = TRUE;
bubble2.hidden = TRUE;
bubble3.hidden = TRUE;
thoughtBubble.hidden = TRUE;
[bubbleAnimation stopAnimating];
animating = FALSE;
}
泡がすべて同じフレームの一部であり、各フレームにもう 1 つの泡が含まれる 1 つの大きなアニメーションを作成できると思いますが、Interface Builder で泡を少し移動できるようにしたかったのですが、このアプローチではできません。多くの柔軟性を提供します。
どんな考えでも大歓迎です。
ありがとう、
マイケル