是否可以在 CAKeyFrameAnimation 期间检测两个 UIImageView 的碰撞?
如果是这样,这是如何完成的,我尝试了多种方法,包括在动画期间检查 CGRects 的碰撞 - 但找不到合适的方法在 CAKeyFrameAnimation 期间执行方法并尝试检测路径和 UIImageView 的碰撞。
是否可以在 CAKeyFrameAnimation 期间检测两个 UIImageView 的碰撞?
如果是这样,这是如何完成的,我尝试了多种方法,包括在动画期间检查 CGRects 的碰撞 - 但找不到合适的方法在 CAKeyFrameAnimation 期间执行方法并尝试检测路径和 UIImageView 的碰撞。
您需要从表示层获取属性。它将具有动画期间存在的信息的最佳近似值。通过访问它
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];
完成后不要忘记使计时器无效。