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;
    	}
    }

               

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

  • 相关阅读:
    向量期望与方差的关系
    向量范数的柯西不等式
    pandas sample函数
    latex 插入表格的网址
    寻找原根
    反射
    python库下载速度慢的解决
    anaconda3 修改python版本
    spark RDD的缓存和检查点不同使用场景和工作机制 -- (视频笔记)
    HTML一键打包APK解决误报毒问题
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3055222.html
Copyright © 2011-2022 走看看