0

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

访问动画的presentationLayer以检测碰撞

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

1 回答 1

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");
}
于 2013-03-30T14:47:43.033 回答