在CAKeyFrameAnimation期間沿着路徑行進時,是否有可能檢測到兩個UIImageView的碰撞?在CAKeyFrameAnimation期間檢測碰撞
如果是這樣做了,我已經嘗試了多種方法,包括在動畫期間檢查CGRects是否存在碰撞 - 但在CAKeyFrameAnimation期間找不到合適的方法來執行方法,並嘗試檢測路徑的碰撞和UIImageView。
在CAKeyFrameAnimation期間沿着路徑行進時,是否有可能檢測到兩個UIImageView的碰撞?在CAKeyFrameAnimation期間檢測碰撞
如果是這樣做了,我已經嘗試了多種方法,包括在動畫期間檢查CGRects是否存在碰撞 - 但在CAKeyFrameAnimation期間找不到合適的方法來執行方法,並嘗試檢測路徑的碰撞和UIImageView。
您需要從表示層獲取屬性。它將具有動畫期間存在的最佳信息近似值。可通過
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];
當你完成後,不要忘記使計時器無效。
我在哪裏添加這段代碼來檢查? –
我想在動畫發生的時候檢查這個屬性,或者檢查動畫跟隨的路徑是否符合UIImageView –
我已經告訴過你了。只要你願意,檢查哪些屬性對你來說很重要,但是你必須在表示層檢查它們,因爲這是跟蹤動畫發生的唯一值。 –