私はUIViewをアニメーション化していて、そのフレームが別のUIViewのフレームと交差しているかどうかをチェックしたいと思います。これは、私がUIViewの "スポーン"する方法です:アニメーション中にCGRectが変化しない
- (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}}
(ポストアニメーション値)を出力し続けます。
これはなぜですか?
p.s.どちらの方法は、NSTimerと直接的または間接的に呼び出されており、したがって、あなたのコードから背景
のNSLog(:、NSStringFromCGRect(oncomer1.frame)の "%@ Oncomer" @)何;アニメーションが完了した後の出力? – msgambel
その値。私はそれがアニメーション後の価値であることを理解しました。 'oncomer1.frame'は、アニメーションが始まるとすぐにこの値に設定されます。 –
アニメーション中のフレームとは対照的に、ビューの中心を見るのは良い考えです。 checkCollisionメソッドの中心点に基づいてrectを作成して、それが機能するかどうか調べてみませんか?最初に、アニメーション中に変化するかどうかをNSLoggingで確認してください。 – msgambel