在CAKeyFrameAnimation期间检测碰撞

在CAKeyFrameAnimation期间沿着路径行进时,是否可以检测到两个UIImageViews的碰撞?

如果是这样,我已经尝试了多种方法,包括在动画期间检查CGRects是否发生碰撞 – 但是在CAKeyFrameAnimation期间找不到合适的方法来执行方法并尝试检测路径和UIImageView的碰撞。

您需要从表示层获取属性。 它将具有动画期间存在的最佳信息近似值。 访问它

view.layer.presentationLayer 

有关详细信息,请查看CALayer / presentationLayer的文档。

如果要检查冲突,可以获取每个对象的presentationLayer,然后访问要测试冲突的任何属性。 确切的检查方式取决于哪种类型的图层,以及是否需要简单的hitTest或深度检查。 只有您知道要查找的时间和类型的碰撞。

但是,要在动画制作动画时访问对象的属性,您需要presentationLayer。

编辑

您可以随时进行检查。 您可以在其他操作的上下文中执行此操作,也可以使用NSTimer在某个时间间隔执行此操作。 您甚至可以使用CADisplayLink,它同时将您挂钩到动画计时器本身。

如果您使用CADisplayLink,我建议将frameInterval设置为尽可能高的值,并且仍然按照您的要求进行操作,以免影响性能。

  timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(checkForCollisions)]; // Callback is for every frame, which is 60 times per second. // Only callback every 6 frames (which is ten times per second) timer.frameInterval = 6; [timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

完成后不要忘记使计时器无效。