Objective c 使用CGRectIntersectsRect检测两个Calayer之间的碰撞

Objective c 使用CGRectIntersectsRect检测两个Calayer之间的碰撞,objective-c,calayer,collision,Objective C,Calayer,Collision,我试图使用CGRectIntersectsRect检测两个Calayer之间的碰撞。一个是层层次结构的一部分,另一个是主视图的子层。我试过这个: 它没有任何一致性。这是我现在拥有的。“LegLowerLeft”是CAlayers层次结构的一部分,“rec2”是主视图的子视图。提前感谢您的帮助 -(void) checkForCollisionWithRec{ if(CGRectIntersectsRect(((CALayer*)self.creature.legLowerLeft.pres

我试图使用CGRectIntersectsRect检测两个Calayer之间的碰撞。一个是层层次结构的一部分,另一个是主视图的子层。我试过这个:

它没有任何一致性。这是我现在拥有的。“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");}
 }

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

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

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

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

奇怪。这对我的项目中的每一个CALayer都非常有效,但对于我需要它的人来说。当我将生物类层次结构的各个部分相互比较(我用CALayers制作的角色)时,它会起作用,但不会超出它。无论如何,我想我想出了另一个解决方案来做我需要做的事情。谢谢,这对其他事情还是有用的。奇怪。这对我的项目中的每一个CALayer都非常有效,但对于我需要它的人来说。当我将生物类层次结构的各个部分相互比较(我用CALayers制作的角色)时,它会起作用,但不会超出它。无论如何,我想我想出了另一个解决方案来做我需要做的事情。谢谢,这对其他事情还是有用的。