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