2008-09-22 94 views
3

我有一些NSViews,我根據我的窗口的大小放在兩個佈局之一。如何在調用resizeSubviewsWithOldSize的過程中在動畫代理上觸發Core Animation?

當相關的superview接收到resizeSubviewsWithOldSize方法時,我正在調整佈局。

這可行,但我想動畫變化。所以當我設置新框架時,我自然會嘗試調用動畫代理,但當用戶仍在拖動時,動畫將無法運行。如果我在動畫被安排完成之前釋放鼠標,我可以看到動畫的尾部,但在此之前沒有任何動畫。我試圖確保kCATransactionDisableActions被設置爲NO,但這沒有幫助。

是否可以啓動一個新的動畫並在調整大小期間實際運行它?

回答

2

我不認爲你可以輕鬆做到這一點,因爲CA的動畫是通過計時器運行的,並且計時器在用戶拖動時處於活動狀態的runloop模式下不會觸發。

如果您可以在用戶拖動時控制runloop,則可以使用runloop模式進行操作。這將使它的工作。我不認爲你可以在CA方面改變它。

0

這真的不是一個答案,但我會建議在拖動窗口大小的同時動畫。屏幕已經開始動畫(從窗口移動) - 進一步的動畫可能會在視覺上混亂和無關。

CoreAnimation效果最適合用於從一個已知狀態移動到另一個已知狀態 - 例如,當首選項窗口的大小隨着新窗格內容的大小而變化,並且您知道舊的和新的尺寸,或者當您淡入淡出對象進入或退出(或兩者)。在窗口大小調整的同時進行動畫將會使視覺混亂,並且使用戶難以專注於獲取窗口的大小。

+0

在適當的情況下,這些評論並不適用於我的情況。我正在兩個已知的狀態之間移動。兩個簡單的佈局選項,取決於可用空間。互動的作用非常好,只是從一個「彈出」到另一個,但如果它可以動畫化,那麼它就不那麼震撼了。 – 2008-10-01 01:33:16

相關問題