2010-10-06 69 views
1

我有两个UIImageView位于水平屏幕的中心,当用户单击一个按钮时,另一个位于屏幕外的UIImageView从右侧滑入。我只是想检测何时将视图带到屏幕上与两个静态视图相冲突。问题是,当我运行我的代码并检查CGRect框架时,它们从视图的开始位置返回,而不是结束,无论我在哪里将框架调用放置在我的方法中,或者即使将它们放在单独的方法之外。我对Obj-C有点新,并且我明白核心动画运行在一个单独的线程上,我猜测这就是为什么我得到起始值。 (如果我在这里错了,请纠正我)。Objective-C:问题与CGRect .frame intersect /包含

所以,我想这里的问题是如何检测碰撞,当一个项目是静态的,另一个是动画。这里是我的代码(随意把它清理干净):

- (IBAction)movegirl 
{ 

    //disabling button 
    self.movegirlbtn.enabled = NO; 

    //getting graphics center points 
    CGPoint pos = bushidogirl.center; 
    CGPoint box1 = topbox.center; 
    CGPoint box2 = bottombox.center; 

    //firing up animation 
    [UIView beginAnimations: nil context: NULL]; 
    //setting animation speed 
    [UIView setAnimationDuration:2.0 ]; 

    //setting final position of bushidogirl, then resetting her center position 
    pos.x = 260; 
    bushidogirl.center = pos; 

    //running animations 
    [UIView commitAnimations]; 

    //playing gong sound 
    [self.audioplayer play]; 

    //enabling button 
    self.movegirlbtn.enabled = YES; 


    [self collisiondetection: bushidogirl : topbox]; 
} 

- (void)collisiondetection:(UIImageView *)item1 : (UIImageView *)item2 
{ 

    CGRect item1frame = item1.frame; 
    CGRect item2frame = item2.frame; 

    NSLog(@"Item1 frame = %d and Item 2 frame = %d", item1frame, item2frame); 
} 

回答

4

如何:

if (CGRectIntersectsRect(item1frame, item2frame)) 
{ 
    // collision!! 
} 
+0

感谢您的回答。我应该更清楚一点。我可以编码如何检查并查看是否发生碰撞,当我这样做时,我会在碰撞时得到否定结果。 – PruitIgoe 2010-10-06 23:59:23

+0

你如何确定项目框架?您是否使用相对于共同父视图的框架? – 2010-10-07 00:06:46

+0

我可能不清楚你在问什么。如果你的意思是这样的:CGRect thisframe = parentObject.imageView.frame然后不,他们的层次结构是UIView-> UIImageView,我将它们引用为UIImageView.frame ...我假设UIView是这里的父项。 – PruitIgoe 2010-10-07 11:27:39