您的位置:首页 > 移动开发 > IOS开发

iOS图片加载的消耗

2015-06-10 21:54 393 查看
一般情况下我们会对图片大小进行限制来防止数据加载缓慢,之前没有特别的感觉,最近在做一个需求的时候遇到了这方面很明显的问题。
需求是这样的:
1.一个拍照和视频录制统一在一个view的控件,要求使用view中的toolbar切换来控制是录制视频还是拍照片。
2.toolbar两种状态的切换需要用立方体动画切换;
3.在照相模式下,toolbar左下角显示相册中第一个相片。

我在第一次使用到拍照toolbar的时候获取相册照片,获取相片代码如下:
ALAssetsLibrary  *assetsLibrary =[[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAllusingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    if(!wakSelf.firstPhotoImage) {
       [group enumerateAssetsUsingBlock:^(ALAsset*result, NSUInteger index, BOOL *stop) {
           if(!wakSelf.firstPhotoImage) {
              NSString *assetType = [resultvalueForProperty:ALAssetPropertyType];
              if ([assetTypeisEqualToString:ALAssetTypePhoto]) {
                 ALAssetRepresentation *assetRepresentation=[result defaultRepresentation];
                 CGFloat imageScale = [assetRepresentationscale];
                 UIImageOrientation imageOrientation =(UIImageOrientation)[assetRepresentation orientation];
                 CGImageRef imageReference = [assetRepresentationfullResolutionImage];
                 UIImage *image =[[[UIImage alloc]initWithCGImage:imageReference scale:imageScaleorientation:imageOrientation] autorelease];
                 wakSelf.firstPhotoImage = image;
              }
           }
       }];
    }
} failureBlock:^(NSError *error) {
}];

但是在真机运行的时候发现第一次动画的时候没有动画过程,当照相toolbar展示过一次之后就正常显示动画了。

感觉应该是动画跟取相片有线程冲突或者其他线程问题,于是我用主动使用GCD对取照片的代码进行分装,仍然不行;还是线程冲突?我在生成这个view的时候去取照片,仍然不行。甚至到最后我在程序加载,load这个class的时候取照片,问题还在。那么就不是线程冲突的问题了。

然后我才想到照片尺寸的问题,这就很好办了,退出最初,在上面获取到照片之后,把照片压缩到一个比较小的尺寸。再次运行代码,问题解决。

回头想想,其实最早应该考虑的就是相片尺寸问题,关于线程,这个操作本来就是异步的,即使在这个操作的过程中动画开始,他也会取当时照片toolbar的状态,之后进行动画,异步的执行并不会导致动画异常。另外我做的是在生成照相toolbar的时候判断了第一张照片是否获取,如果没有我就使用了默认图片,所以也不会是线程问题。一切都是因为刚开始的思维误区,直接就奔着线程去了~~~所以以后再碰到类似问题一定要先好好分析问题再作出决定啊。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: