内存图片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 bundleUIImage * 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;}
}
文章结束给大家分享下程序员的一些笑话语录: 火车
一个年轻的程序员和一个项目经理登上了一列在山里行驶的火车,他们发现 列车上几乎都坐满了,只有两个在一起的空位,这个空位的对面是一个老奶 奶和一个年轻漂亮的姑娘。两个上前坐了下来。程序员和那个姑娘他们比较 暧昧地相互看对方。这时,火车进入山洞,车厢里一片漆黑。此时,只听见 一个亲嘴的声音,随后就听到一个响亮的巴掌声。很快火车出了山洞,他们 四个人都不说话。
那个老奶奶在喃喃道, “这个年轻小伙怎么这么无礼, 不过我很高兴我的孙女 扇了一个巴掌”。
项目经理在想,“没想到这个程序员居然这么大胆,敢去亲那姑娘,只可惜那 姑娘打错了人,居然给打了我。”
漂亮的姑娘想,“他亲了我真好,希望我的祖母没有打疼他”。
程序员坐在那里露出了笑容, “生活真好啊。 这一辈子能有几次机会可以在亲 一个美女的同时打项目经理一巴掌啊”
转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/02/3055222.html
内存图片IOS app启动动画的实现相关推荐
- 马蜂窝 iOS App 启动治理:回归用户体验
增长.活跃.留存是移动 App 的常见核心指标,直接反映一款 App 甚至一个互联网公司运行的健康程度和发展动能.启动流程的体验决定了用户的第一印象,在一定程度上影响了用户活跃度和留存率.因此,确保启 ...
- iOS APP启动函数调用顺序~详解
//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄 一.OC调用 C++ 会为静态创建的对象生成初始化器,与静态语言不同,OC基于Runtime机制可以用类的名字来实例化一个类的对象. ...
- iOS App 启动性能优化
为什么80%的码农都做不了架构师?>>> 本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq. ...
- iOS App 启动优化
简介: 作为程序猿来说,"性能优化"是我们都很熟悉的词,也是我们需要不断努⼒以及持续进⾏的事情:其实优化是⼀个很⼤的课题,因为细分来说的话有⼤⼤⼩⼩⼗⼏种优化⽅向 ,但是切忌在实际 ...
- iOS APP 启动页面的使用
APP启动时候我们经常看到一个启动页面,我知道的有一下两种做法: LaunchScreen.storyboard 的运用 点击LaunchScreen.storyboard,用IB为LaunchScr ...
- ios App启动加载广告页面思路
需求 很多app(如淘宝.美团等)在启动图加载完毕后,还会显示几秒的广告,一般都有个跳过按钮可以跳过这个广告,有的app在点击广告页之后还会进入一个广告页面,点击返回进入首页.虽然说这个广告页面对用户 ...
- QT TextEdit设置背景、明文加密、弹出网站、弹出自定义对话框、gif动态图片、程序启动动画、打包程序、关闭事件
TextEdit设置背景 前提必须已添加了资源图片 铭文加密 ui->passLineEdit->setEchoMode(QLineEdit::Password); 弹出网站 #inclu ...
- iOS App启动页面
很简单,直接把图片命名为Default.png就可以了,放在工程里,当app启动的时候就会有了 当然,不同的分辨率对应不同的名字,但是图片是相同的 4.0 inch screen: Default-5 ...
- iOS App启动+广告思路
文章目录 需求 思路 1.判断文件是否存在,以及初始化广告位 2.无论沙盒中是否存在广告图片,都需要重新调用获取广告接口,判断广告是否更新 3.异步下载图片,以及删除旧图片 4.广告页面的跳过按钮倒计 ...
- iOS App启动广告
一般情况下,App在每次启动时都会有广告,那么是自己自定义UIViewController来实现还是直接使用LaunchScreen.storyboard来实现呢? 因LaunchScreen的本质是 ...
最新文章
- css3 html5宽高不变,html – CSS圆圈,不使用固定的宽度和高度
- 求杨辉三角的前n行数据_LeetCode算法第118题:杨辉三角
- 【Boost】boost库中的小工具enable_shared_from_this
- php网站后台无法退出,zblog“网站关闭”后进入不了后台的解决方法
- linux mysql 5.6.23_mysql 5.6.23 的安装
- 冲击波内幕点滴 (转)
- 急救: Autodesk MapGuide Studio - Preview在MapGuide Open Source环境不能进行中文标注
- 实验五:大数据可视化工具-NodeXL
- 使用Euclid算法求最大公约数
- 在迪士尼打工,不快乐吗?
- 快应用如何接入微信支付
- Oracle报错1031,dataguard 归档日志报1031错误的一次处理
- onclick事件传参时传中文传不过去
- [视频教程] KBEngine mmo手游开发系列(三) - 角色技能与怪物系统
- vCenter 6.7升级到7.0
- RF使用技巧--导入自定义的库文件
- css3D制作立体旋转小方块
- TabLayout横排滑动
- vue中按ctrl原页面锁定打开新页面
- java计算机毕业设计高校教学资源共享平台MyBatis+系统+LW文档+源码+调试部署
热门文章
- Java 设计模式 之 工厂方法模式、抽象工厂模式
- php 服务器监控源码,PHP自动Get监控源码
- 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_14-异常处理-异常处理的问题分析...
- 小论坛 之Linux服务器搭建Apache PHP mysql 环境
- Leetcode 137. Single Number I/II/III
- Java面试题之 static执行顺序
- 事件--[Asp.Net]
- c#生成随机彩色验证码例子
- 基础知识04 - 零基础入门学习汇编语言04
- notepad++格式化代码,自动对齐