2012-05-03 29 views
2

在CAKeyFrameAnimation期間沿着路徑行進時,是否有可能檢測到兩個UIImageView的碰撞?在CAKeyFrameAnimation期間檢測碰撞

如果是這樣做了,我已經嘗試了多種方法,包括在動畫期間檢查CGRects是否存在碰撞 - 但在CAKeyFrameAnimation期間找不到合適的方法來執行方法,並嘗試檢測路徑的碰撞和UIImageView。

回答

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]; 

當你完成後,不要忘記使計時器無效。

+0

我在哪裏添加這段代碼來檢查? –

+0

我想在動畫發生的時候檢查這個屬性,或者檢查動畫跟隨的路徑是否符合UIImageView –

+0

我已經告訴過你了。只要你願意,檢查哪些屬性對你來說很重要,但是你必須在表示層檢查它們,因爲這是跟蹤動畫發生的唯一值。 –