zoukankan      html  css  js  c++  java
  • 内存图片IOS app启动动画的实现

    废话就不多说了,开始。。。

              关于在App启动时播放一段动画,可以用flash直接播放,也可以用多张续连的图片来实现,在项目中,我选择了后者。

        通过续连的多张图片做出动画效果,系统自带的UIImageView能就成完这个功能,一开始我也这么做的,但是最后发明内存爆了,占了800M多(iPAD)。(注:一张100K的png图片初始化为Image放到内存后会占用几M到几十M的间空不等)

          最后我选择了通过准时器断不新刷UIImageView.image的方法。

              在这里又被系统忽悠了一把。 [UIImgae imageName: ]和[UIImage imageWithContentsOfFile: ],这两个方法从理论上说,前者是系统分配一块内存缓存图片,并在app性命     周期内始终存在,而后者是时暂存于内存,过后就放释的。我用了后者,发明内存一样爆掉,乎似(确定)系统并没有放释内存。这个问题困扰了我半天,到底如何才能让系统实时放释这些间空,换个角度想可能更好,手动请申 —— 手动放释。

              于是我换成了[UIImage alloc]initWIthContentsOfFile: ]方法,这样就胜利的决解掉了内存没法放释的问题。我的动画图片又106张,测试中发明只占了40-50M的间空,可以受接。

              决解了内存问题,如何能让图片速快新刷就成了事不宜迟。

              我建了个缓存池,台后异步取读图片到NSMutiableArray中,主线程从array中取获image并准时新刷到ImageView中。这个方法在多核备设中性能有所提高,动画更加畅流。

              上面是心核代码:

        

        每日一道理
    能够破碎的人,必定真正活过。林黛玉的破碎,在于她有刻骨铭心的爱情;三毛的破碎,源于她历经沧桑后一刹那的明彻与超脱;凡高的破碎,是太阳用黄金的刀子让他在光明中断不剧痛,贝多芬的破碎,则是灵性至极的黑白键撞击性命的悲壮乐章。如果说那些平凡者的破碎泄漏的是人性最纯最美的光点,那么这些优秀的灵魂的破碎则如银色的梨花开满了我们头顶的天空。
    - (void) precache
    {
    	_cacheImages = TRUE;
    	_cacheImageArray = [[NSMutableArray alloc]initWithCapacity:0];
    
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSLog(@"################################  image swap begin #########################");
            UIImage * img = nil;
            for (int i =1; i < [_imageNames count]; i++)
            {
                if(_cacheImageArray.count <= KSwapImageNum) {
                    NSString * name = [_imageNames objectAtIndex:i];
                    img = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name ofType:nil]];
                    [_cacheImageArray addObject:img];
                    [img release];img = nil;
                }else{
                    [_requestCondition lock];
                    [_requestCondition wait];
                    [_requestCondition unlock];
                    i--;
                }
            }
            NSLog(@"################################  image swap end #########################");
        });
    }
    
    
    - (void) setImageAtIndex:(NSInteger)index
    {
    	_imageset = TRUE;
    	
    	NSString * name = [_imageNames objectAtIndex:index];
        
    	// load the image from the bundle
    	UIImage * img = nil;
    	if (_cacheImages)
    	{
            if (_cacheImageArray.count > 0) {
                img = [_cacheImageArray objectAtIndex:0];
                // set it into the view
                _imageView.image = nil;
                [_imageView setImage:img];
                
                [_cacheImageArray removeObjectAtIndex:0];
                if (_cacheImageArray.count <= KSwapImageMinNum) {
                    [_requestCondition signal];
                }
                img = nil;
            }
    	}
    	else
    	{
    		img = [[UIImage alloc]initWithContentsOfFile:
                   [[NSBundle mainBundle] pathForResource:name ofType:nil]];
            // set it into the view
            [_imageView setImage:img];
            [img release];img = nil;
    	}
    }

               

    文章结束给大家分享下程序员的一些笑话语录: 火车
    一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现 列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面是一个老奶 奶和一个年轻漂亮的姑娘。两个上前坐了下来。程序员和那个姑娘他们比较 暧昧地相互看对方。这时,火车进入山洞,车厢里一片漆黑。此时,只听见 一个亲嘴的声音,随后就听到一个响亮的巴掌声。很快火车出了山洞,他们 四个人都不说话。
    那个老奶奶在喃喃道, “这个年轻小伙怎么这么无礼, 不过我很高兴我的孙女 扇了一个巴掌”。
    项目经理在想,“没想到这个程序员居然这么大胆,敢去亲那姑娘,只可惜那 姑娘打错了人,居然给打了我。”
    漂亮的姑娘想,“他亲了我真好,希望我的祖母没有打疼他”。
    程序员坐在那里露出了笑容, “生活真好啊。 这一辈子能有几次机会可以在亲 一个美女的同时打项目经理一巴掌啊”

  • 相关阅读:
    Android开发总结
    LeakCanary原理分析
    机器学习
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3055222.html
Copyright © 2011-2022 走看看