OSX下gif文件动画解析

原创 2015年11月19日 22:39:39
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

MacOS 开发 - NSImageView

关键词:MacOS 开发、NSImageView、gif、imageScaling、canDrawSubviewsIntoLayer、setAnimates、imageFrameStyle 定义 创建...
  • lovechris00
  • lovechris00
  • 2017年09月14日 17:43
  • 625

将一个NSImage实例保存成图片文件

这里例子中将NSImage对象以png的格式保存到本地硬盘。 - (void )saveImage:(NSImage *)image {     [image lockFocus];    ...
  • xxq_2011
  • xxq_2011
  • 2013年08月18日 18:17
  • 2747

NSImage加载图片

转自:http://www.leoshao.com/57.html 刚开始用NSImage,从网上查找的方法是调用 imageNamed方法 NSImage *myImage = [NS...
  • henry_sea
  • henry_sea
  • 2011年09月28日 23:24
  • 4795

Core Animation Example Code

#import #import @interface KeyFrameView : NSView{ NSImageView *mover; NSImage...
  • leonpengweicn
  • leonpengweicn
  • 2012年11月09日 15:48
  • 846

OSX下gif文件动画解析

Appkit自带的NSImageView可以自动解析gif文件,根据gif文件关键帧生成动画。但是当父类View或自身开启layer-backed功能时,gif动画功能就不起作用了。       ...
  • SkyNullCode
  • SkyNullCode
  • 2015年11月19日 22:39
  • 1488

mac 如何实现一个view自转的动画

让NSView围绕中心点旋转,只要注意view中layer的anchorPoint即可 NSImage *rimage = rb.GetNativeImageNamed(IDR_X115_CHECK_...
  • bbmjja0000
  • bbmjja0000
  • 2015年08月05日 20:43
  • 945

gif图片格式解析

 gif图片格式解析飘飘白云整理参考:http://www.w3.org/Graphics/GIF/spec-gif89a.txt网络中文gif资料 简介:GIF(Graphics Interchan...
  • kesalin
  • kesalin
  • 2006年09月07日 11:02
  • 13469

gif文件的加载--实现动画效果

下面说一下详细步骤吧:  1。下载 PictureEx.h和PictureEx.cpp两个文件 把这两个文件放在工程的文件夹里面,然后在将这两个文件添加到工程里面去,这样你的工程里就多了一...
  • tianzhigang889
  • tianzhigang889
  • 2011年09月05日 16:24
  • 805

NSImageView 实现跑马灯效果

NSImageView 实现跑马灯效果 zai
  • u013317006
  • u013317006
  • 2014年08月28日 13:49
  • 1028

cocoa开发之:利用CABasicAnimation实现图片旋转

最近由于一直在敢项目进度,所以没有抽出时间来坚持写博客,刚好趁着今天周五了,也顺便该总结一下,同时也给大家分享下我昨天攻克的一个难点,获取对那些Mac 开发大神来说不算什么,毕竟也是耗费了一些心血!总...
  • u012890071
  • u012890071
  • 2016年03月11日 16:46
  • 1030
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OSX下gif文件动画解析
举报原因:
原因补充:

(最多只允许输入30个字)