Я анимирую UIView и хочу проверить, пересекается ли его кадр с другим кадром UIView.Вот как я "порождаю" один из UIViews:
- (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 и, таким образом, выполняются в фоновом режиме