2

是否可以在 CAKeyFrameAnimation 期间检测两个 UIImageView 的碰撞?

如果是这样,这是如何完成的,我尝试了多种方法,包括在动画期间检查 CGRects 的碰撞 - 但找不到合适的方法在 CAKeyFrameAnimation 期间执行方法并尝试检测路径和 UIImageView 的碰撞。

4

1 回答 1

1

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

view.layer.presentationLayer

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

当您想要检查碰撞时,您将获取每个对象的presentationLayer,然后访问您想要测试碰撞的任何属性。检查的确切方法取决于图层的类型,以及您是否想要简单的 hitTest-ing 或深度检查。只有您知道要查找的碰撞时间和类型。

但是,要在动画制作时访问对象的属性,您需要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];

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

于 2012-05-03T13:02:48.020 回答