当一个 UIImageView 在 CAKeyFrameAnimation 期间沿一条路径行进时,是否可以检测到两个 UIImageView 的碰撞?
如果是这样,这是如何完成的,我尝试了多种方法,包括在动画期间检查 CGRect 是否发生碰撞 - 但找不到合适的方法来在 CAKeyFrameAnimation 期间执行方法并尝试检测路径和 UIImageView 的碰撞。
您需要从表示层获取属性。它将具有动画期间存在的信息的最佳近似值。通过以下方式访问它
view.layer.presentationLayer
有关更多详细信息,请参阅 CALayer/presentationLayer 的文档。
当您想要检查碰撞时,您可以获取每个对象的presentationLayer,然后访问您想要测试碰撞的任何属性。检查的确切方法取决于层的类型,以及您是否想要简单的命中测试或深度检查。只有您知道您想要寻找的碰撞时间和类型。
但是,要在对象动画时访问其属性,您需要presentationLayer。
EDIT
您可以随时进行这些检查。您可以在另一个操作的上下文中执行此操作,或者使用 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];
完成后不要忘记使计时器无效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)