我對CoreAnimation不是很熟悉,所以我希望我錯過了一些非常簡單的事情。我想用簡單的方式爲一個NSView設置一個自定義屬性(NSGradient),使用[[view animator] setGradient:gradient];
。我定義了+ (id)defaultAnimationForKey:(NSString *)key
並返回了一個簡單的CABasicAnimation,但是,沒有執行動畫。由於這適用於更簡單的類型和NSColor,我猜CABasicAnimation不適用於漸變。很好,但在這種特殊情況下,漸變是微不足道的(總是兩次停止),所以我可以輕鬆地編寫插值函數。 問題:如何定義自定義插值?我搜索了關於視圖,圖層和動畫的代表,動畫類的子類等,但我無法弄清楚這些事情。謝謝!CABasicAnimation和自定義類型
回答
我以爲我記得當我學習如何使用核心動畫時,通過一些Apple文檔傳遞,該動畫展示瞭如何設置動畫,這些動畫無法由定義動畫提供的屬性describedescript來處理。一路上,我偶然發現了蘋果的一些示例代碼,其描述如下:
顯示單個漸變圖層,並使用新的隨機顏色連續動畫。
這可能是您已經以另一種方式處理的具體任務的答案。我在Xcode的文檔和API參考中找到它,示例代碼的名稱僅爲漸變。 (請注意,原始版本1.0和更新版本1.1在今年4月重做,因此應該更容易與當前工具一起使用。
但是,創建自定義動畫的更大問題不能通過核心動畫本身的自動化,是按照在部分使用的NSAnimation對象從蘋果公司的動畫編程指南可可的例子,它的主題子類NSAnimation和推薦的方法下描述的標題平滑下顯示動畫。您可以覆蓋setCurrentProgress:
方法,以便每個一次是叫你先調用Super
使NSAnimation更新進度值,即您的自定義動畫屬性,然後做任何更新或繪圖需要爲您的動畫的下一幀。以下是蘋果所引用文檔中提供的說明和示例代碼:
正如提到的「設置和處理進展標誌,」你可以將一系列的進步標誌的一個NSAnimation對象,並有委託執行動畫:didReachProgressMark:在每個進度標記處重繪對象的方法。但是,這不是使對象動畫的最佳方式。除非您設置了大量進度標記(每秒30次或更多),否則動畫可能會顯得不平穩。
更好的方法是繼承NSAnimation並覆蓋setCurrentProgress:方法,如清單4所示。NSAnimation對象在每幀之後調用此方法以更改進度值。通過攔截此消息,您可以執行該框架所需的任何重繪或更新。如果你重寫這個方法,一定要調用super的實現,以便它可以更新當前的進度。
Listing 4 Overriding the setCurrentProgress: method
- (void)setCurrentProgress:(NSAnimationProgress)progress
{
// Call super to update the progress value.
[super setCurrentProgress:progress];
// Update the window position.
NSRect theWinFrame = [[NSApp mainWindow] frame];
NSRect theScreenFrame = [[NSScreen mainScreen] visibleFrame];
theWinFrame.origin.x = progress *
(theScreenFrame.size.width - theWinFrame.size.width);
[[NSApp mainWindow] setFrame:theWinFrame display:YES animate:YES];
}
所以基本上你定義一個「進步價值」(可能由幾個固定值),它定義您的自定義動畫的狀態,寫,鑑於目前的「進步價值」的代碼繪製或改變什麼畫當動畫處於特定狀態時。然後,讓NSAnimation使用設置動畫的常規方法運行動畫,它將執行您的代碼以在適當的時間繪製動畫的每個幀。
我希望能回答你想知道的東西。我懷疑我之所以能夠通過搜索而沒有看到它,因爲我終於必須去我認爲可能的地方,並且一頁接一頁地瀏覽整個主題以再次找到它!
- 1. YamlDotNet和自定義類型
- 2. NSCoder和自定義類型
- 3. Wordpress自定義帖子類型和自定義分類標準
- 4. 自定義分類和自定義帖子類型的Wordpress,WP_Query
- 5. Haskell自定義數學類型和類
- 6. C#/類和自定義類型
- 7. 自定義帖子類型和類別
- 8. 自定義類型
- 9. 創建自定義字段類型和自定義內容類型
- 10. SqlTableProfileProvider和自定義類型屬性
- 11. 自定義文件類型和圖標
- 12. bsearch和結構(自定義類型)
- 13. Raphael.js自定義元素和新類型?
- 14. 自定義屬性和類型檢查
- 15. 的Symfony,ElasticSearch和自定義類型
- 16. QVariant :: isNull()和自定義類型
- 17. 列表實現和自定義類型
- 18. Word和自定義內容類型
- 19. MongoMapper和自定義類型屬性
- 20. qdbus和自定義類型的編組
- 21. 自定義ValidationMessageFor和錯誤類型
- 22. 自定義帖子類型和404頁
- 23. wp_enqueue_media()和自定義帖子類型
- 24. 數據表和自定義類型
- 25. RecyclerView和自定義項目類型
- 26. 固定鏈接自定義類型後與自定義分類
- 27. 含義和類型定義
- 28. 定義自定義數據類型
- 29. 錯誤地定義自定義類型?
- 30. 休眠自定義類型定義
你能發表更多的代碼嗎? – Sneakyness 2011-07-28 21:39:33
我能夠解決這個定義兩種顏色而不是漸變的問題。由於NSColor具有動畫效果,因此工作得很好。但是,有關自定義類型的自定義插值的主要問題尚未解答... – Gobra 2011-08-02 09:03:12