我正在为 UIView 制作动画,并想检查它的框架是否与另一个 UIView 的框架相交。这就是我“生成”其中一个 UIView 的方式:
- (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 在屏幕上移动,但登录 oncomer1.frame 永远不会改变:它一直在输出Oncomer: {{50, 520}, {30, 60}}
(这是动画后的值)。
有人知道为什么吗?
Ps 这两个方法都直接或间接调用 NSTimer,因此在后台执行