gpt4 book ai didi

objective-c - 在 CAKeyFrameAnimation 期间检测碰撞

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:39 26 4
gpt4 key购买 nike

当一个 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];

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

关于objective-c - 在 CAKeyFrameAnimation 期间检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com