Objective-C:CGRect .frame intersect / contains的问题

时间:2010-10-06 20:50:53

标签: objective-c

我有两个位于水平屏幕中心的UIImageViews,当用户点击一个按钮时,另一个位于屏幕外的UIImageView从右侧滑入。我只是想检测被带到屏幕上的视图何时与两个静态视图发生碰撞。问题是当我运行我的代码并检查CGRect帧时,它们是从视图开始的地方返回的,而不是结束,无论我将帧调用放在我的方法中的哪个位置,或者即使我将它们放在方法之外的单独的方法中。我对Obj-C有点新意,我理解Core Animation在一个单独的线程上运行,我猜这就是为什么我得到起始值。 (如果我错了,请纠正我)。

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

- (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);
}

1 个答案:

答案 0 :(得分:4)

怎么样:

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