我有兩個視圖:A和B.A位於屏幕的頂部,B位於屏幕的底部。Objective-C中的「推動」動畫
當用戶按下按鈕時,視圖B用EaseInEaseOut貝塞爾曲線向上動畫,直到它達到y = 0。當B正在到達目的地的路上時,它應該在A點擊時A向上。換句話說,當B從底部到頂部過渡期間,B已經通過了某個Y座標(A的y原點+高度)時,A應該堅持B,這樣看起來B向上推A。
我迄今爲止嘗試:
- 註冊一個目標+選擇到CADisplayLink後,立即在用戶按下按鈕。在這個選擇器中,通過訪問其presentationLayer並相應地調整A的y座標來請求視圖B的y座標。然而,這種方法結果不夠準確:presentationLayer的框架落在B屏幕上的當前位置(這可能是因爲-presentationLayer重新計算了當前時間的動畫視圖的位置,這需要超過1幀) 。當我增加B的動畫持續時間時,此方法正常工作。
- 在用戶按下按鈕後立即將目標+選擇器註冊到CADisplayLink。在此選擇器內部,通過求解x =經過時間/動畫持續時間(應該返回行距/總距離的商距)的貝塞爾方程來計算B的當前y座標。我使用蘋果公司的開源UnitBezier.h(http://opensource.apple.com/source/WebCore/WebCore-955.66/platform/graphics/UnitBezier.h)。但是,結果不正確。
關於我可以嘗試下一步的任何建議?
絕妙而簡單的解決方案。謝謝! – datwelk 2013-03-12 18:35:51