在viewDidLoad中,我正在创建一个名为DeepFryingBasket的imageView。您可以用手指左右移动篮子,但不能向上或向下移动篮子。我的第二张图片是一个落在屏幕上的法国朋友。如果这个朋友和篮子发生碰撞,这个朋友应该会消失,所以它看起来像是落在了篮子里。这就是为什么我有一个NSTimer每隔0.01秒触发一次CollisionDetection方法。
问题是当我用篮子抓住法国朋友时,朋友不会消失。 我确信调用了collisionDetection方法,但编译器永远不会进入if语句,我不知道为什么。任何帮助都会非常感激!
- (void)viewDidLoad
{
[super viewDidLoad];
DeepFryingBasket =[[UIImageView alloc] initWithFrame:CGRectMake(110,468,100,80)];
DeepFryingBasket.image = [UIImage imageNamed:@"DeepFryingBasket"];
[self.view addSubview:DeepFryingBasket];
CollisionDetection = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(collisionDetection) userInfo:nil repeats:YES];
[CollisionDetection fire];
}
-(void)collisionDetection{
if (CGRectContainsPoint (FrenchFrie.frame, DeepFryingBasket.center)){
[FrenchFrie removeFromSuperview];
points = points + 1;
dropped = dropped +1;
}
}
我使用以下代码移动篮子:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
touchLocation = [touch locationInView:self.view];
frame = DeepFryingBasket.frame;
if (CGRectContainsPoint(frame, touchLocation)){
DeepFryingBasket.center = CGPointMake(touchLocation.x, DeepFryingBasket.center.y);
}
}
编辑:我也尝试添加
DeepFryingBasket.userInteractionEnabled = YES;
但这并没有太大变化。 我还发现,当法国朋友用动画拍摄时,图像的起源并没有改变。为什么不改变?我注意到,当我移动篮子时,它的中心与我的手指一起移动。 我使用以下代码移动法国朋友:
-(void)letFrenchFrieFall {
[UIView animateWithDuration:10.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
FrenchFrie.frame = CGRectMake(randomX, (int)[[UIScreen mainScreen] bounds].size.height + 40, FrenchFrie.frame.size.width, FrenchFrie.frame.size.height);
} completion:^(BOOL finished){
[FrenchFrie removeFromSuperview];
}];
}
答案 0 :(得分:1)
好的,所以我找到了自己问题的答案: 当imageView由于动画而移动时,x和Y坐标被设置为动画结束的位置;因此,
无法获得它的位置FrenchFrie.frame
您可以使用
FrenchFrieFrame = [[FrenchFrie.layer presentationLayer] frame];
获取当前显示的帧。 别忘了包含Quartzcore Framework并导入它。
#import <QuartzCore/QuartzCore.h>