OSX下gif文件動畫解析

OSX下gif文件動畫解析

        Appkit自帶的NSImageView可以自動解析gif文件,根據gif文件關鍵幀生成動畫。只要設置屬性animates爲YES時,就開啓了動畫動能。但是當父類View或自身開啓layer-backed功能時,gif動畫功能就不起作用了。

        其實解決這種問題,有多種方式吧。一種爲子類化NSImageView,重寫wantsUpdateLayer並返回YES。另外一種方式,就是自己解析gif文件,使用定時器,循環繪製各幀。

        本文打算使用第二種方式。思路大概如下:

1.使用NSImage加載gif文件。


2.從NSImage裏獲取實際表達圖片數據的NSImageRep (NSImage其實類似於容器,NSImageRep纔是正宗的跟圖片數據相關的一種表達方式,對這一部分的理解,完全是個人觀點,不知道理解的對不對)。


將NSImageRep類型轉換成我們需要的類型NSBitmapImageRep,NSBitmapImageRep裏面,我們感興趣的屬性包括NSImageFrameCount、NSImageCurrentFrame和NSImageCurrentFrameDuration。

各字段意義如下:
NSImageFrameCount:通過該字段,可以設置或獲取gif圖片總共多少幀動畫。
NSImageCurrentFrame:通過該字段,可以設置或獲取當前對應哪一個幀(值 <= 總幀數 - 1 )。
NSImageCurrentFrameDuration:通過該字段,可以設置或獲取當前該幀動畫的時間週期。


3.通過NSImageCurrentFrameDuration字段獲取某一幀(當前幀爲第0幀)的動畫時間週期delaytime,開個定時間,每隔delaytime時間,我們重繪製一次,設置繪製的當前幀爲下一幀(這裏面做了一個簡化處理,默認各幀動畫時間意義,考慮到不一樣的情況,請參考大神keefo寫的代碼:[https://github.com/keefo/gifdemo](https://github.com/keefo/gifdemo)),如此反覆。

        最後附上demo(osx下oc與swift本):https://github.com/FyhSky/GifView_OC_Swift

        轉載請註明出處:http://blog.csdn.net/skynullcode

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章