关闭

OSX下gif文件动画解析

标签: 动画gifanimationwantsUpdatNSImageVie
1132人阅读 评论(0) 收藏 举报
分类:
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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16858次
    • 积分:397
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    博客专栏
    文章分类
    最新评论