Objective c 使用CGRectIntersectsRect检测两个Calayer之间的碰撞
我试图使用CGRectIntersectsRect检测两个Calayer之间的碰撞。一个是层层次结构的一部分,另一个是主视图的子层。我试过这个: 它没有任何一致性。这是我现在拥有的。“LegLowerLeft”是CAlayers层次结构的一部分,“rec2”是主视图的子视图。提前感谢您的帮助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
-(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制作的角色)时,它会起作用,但不会超出它。无论如何,我想我想出了另一个解决方案来做我需要做的事情。谢谢,这对其他事情还是有用的。