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

浙公网安备 33010602011771号