我正在尝试使用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");}
}
答案 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");
}