使用CGRectIntersectsRect检测两个CAlayers之间的冲突

时间:2013-03-30 14:25:00

标签: objective-c calayer collision

我正在尝试使用CGRectIntersectsRect来检测两个CAlayers之间的冲突。一个是层次结构的一部分,另一个是主视图的子层。我试过这个:

Accessing presentationLayer of an animation to detect collisions

它不适用于任何一致性。这就是我现在所拥有的。 “LegLowerLeft”是CAlayers层次结构的一部分,“rec2”是主视图的子视图。在此先感谢您的帮助。:

-(void) checkForCollisionWithRec{
  if(CGRectIntersectsRect(((CALayer*)self.creature.legLowerLeft.presentationLayer).frame,
                            ((CALayer*)rec2.presentationLayer).frame))

    { NSLog(@"Collision detected"); }

   else{NSLog(@"No collision detected");}
 }

1 个答案:

答案 0 :(得分:3)

图层的框架位于其超视图的坐标空间中。如果两个图层具有不同的超视图,则无法直接比较它们的帧。您必须将它们转换为一致的坐标空间。

CALayer *layer1 = self.creature.legLowerLeft.presentationLayer;
CALayer *layer2 = rec2.presentationLayer;

CGRect frame1 = layer1.frame;
CGRect frame2 = [layer1 convertRect:layer2.frame fromLayer:layer2];

if(CGRectIntersectsRect(frame1, frame2))
{
  NSLog(@"Collision detected");
}
else
{
  NSLog(@"No collision detected");
}