UIViewをアニメートしていて、そのフレームが別のUIViewのフレームと交差しているかどうかを確認したいと思います。これは、UIViewの1つを「スポーン」する方法です。
- (void) spawnOncomer
{
oncomer1 = [[Oncomer alloc] initWithType:@"car"];
[self.view addSubview:oncomer1];
//make the oncomer race across the screen
[UIView beginAnimations:nil context:NULL]; {
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:3.0];
[UIView setAnimationDelegate:self];
CGRect f = oncomer1.frame;
f.origin.y = self.view.frame.size.height+oncomer1.frame.size.height;
oncomer1.frame = f;
[UIView setAnimationDidStopSelector:@selector(decountCar)];
}
[UIView commitAnimations];
}
ここまでは順調ですね。次に、このUIViewと他のUIViewが衝突するかどうかを確認します。
- (void) checkCollision {
bool collision = CGRectIntersectsRect(car.frame, oncomer1.frame);
if (collision) {
NSLog(@"BOOOOOOOM");
} else {
NSLog(@"Oncomer: %@", NSStringFromCGRect(oncomer1.frame));
}
}
ただし、衝突することはありません。oncomer1が画面上を移動しているのがわかりますが、loggin oncomer1.frameは変更されません。出力を続けますOncomer: {{50, 520}, {30, 60}}
(アニメーション後の値です)。
なぜこれなのか誰か知っていますか?
Ps両方のメソッドはNSTimerを使用して直接または間接的に呼び出されるため、バックグラウンドで実行されます