ここで同様の質問をたくさん見ましたが、探していたものはありませんでした。いずれかの方法:
マップ上の注釈をアニメーション化して上下に移動しています。これを行うには、drawRect でこの関数を呼び出します。
- (void) wiggle {
[UIView animateWithDuration:0.45 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
[self.subView setFrame:CGRectMake(self.subView.frame.origin.x, self.subView.frame.origin.y+WIGGLE_DISTANCE, self.subView.frame.size.width, self.subView.frame.size.height)];
} completion:^(BOOL finished) {
if (finished)
[UIView animateWithDuration:0.45 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{
[self.subView setFrame:CGRectMake(self.subView.frame.origin.x, self.subView.frame.origin.y-WIGGLE_DISTANCE, self.subView.frame.size.width, self.subView.frame.size.height)];
} completion:^(BOOL finished) {if (finished) [self wiggle]; }];
}];
}
つまり、「subView」を上にアニメーション化し、それが終了すると下にアニメーション化し、終了すると自分自身を呼び出します (小刻みに動き続けるため)。
タブを切り替えるまで、これは正常に機能します。このタブに戻ると、アニメーションはありません。viewController の「viewDidAppear」でこれらの各ビューで「setNeedsDisplay」を呼び出してみましたが、drawRect の呼び出しに失敗しました。そこで、viewController の「viewDidAppear」から直接「wiggle」を呼び出してみました。関数は呼び出されますが、アニメーション化されません。何か案は?
ありがとう!