标签: iOS
Obj-C
AVPlayer
UITableView
UICollectionView
最近做一个类似照片
应用的照片视频浏览器,结合 UITableView
和 UICollectionView
将自己录制的视频罗列。
实现过程中有几个点需要注意:
显示多个图片时会造成View 的卡顿,加载图片时需要将
[UIImage imageNamed:imageName]
更改为[UIImage imageWithContentsOfFile:imagePath]
的方式保存图片到 APP 中时会造成内存的递增,这是因为通过
UIImagePNGRepresentation()
方法保存PNG格式图片时,由于ARC机制,会产生大量临时的autorelease对象,需要等待runloop的autoreleasepool销毁时才能销毁这些对象。需要使用ImageIO
的方式来存储图片
+ (void)saveImage:(CGImageRef)image directory:(NSString*)directory filename:(NSString*)filename {
@autoreleasepool {
CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@", directory, filename]];
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);
CGImageDestinationAddImage(destination, image, nil);
if (!CGImageDestinationFinalize(destination))
NSLog(@"ERROR saving: %@", url);
CFRelease(destination);
CGImageRelease(image);
}
}
编辑视频时,会选择多个视频,需要将选择的视频进行预览播放。在使用AVPlayer
来播放视频时,AVPlayer
只能创建16个对象,最多只能支持16个视频的同时播放。当视频不需要继续播放后,需要将它的 AVPlayerItem
置为 nil,否则之前播放过的视频也会算在16个视频之内。
【参考】