私の UIView では、一連のアニメーションに設定した targetView というUIImageViewを作成しました。
[UIView animateWithDuration:1.0
animations:^{self.targetView.center = CGPointMake(220,20);}
completion:^(BOOL finished){
//another animation will begin;
}];
また、指でスワイプするとターゲット方向に移動する、shootViewという別の UIImageView も作成しました。その動きもアニメーションで実装。アニメーションの最後で、targetView との交差を検出します。
[UIView animateWithDuration:1.0
animations:^{
self.shootView.center = CGPointMake(destX, destY);}
completion:^(BOOL finished){
if (CGRectIntersectsRect(self.targetView.frame, self.shootView.frame)) {
//do something
}];
ここで問題があります。intersect コマンドは、targetView が現在のアニメーションの終点に到達し、shootView がたまたまそこにある場合にのみ正常に機能します。targetView がアニメーションの途中で移動している間、2 つのフレームが交差していることが視覚的に非常に明白であっても、交差を検出することはできません。