最近的项目中需要获取手机里的本地视频,找到相关资料比较麻烦,因此在此做分享
@interface ViewController ()
@property (nonatomic,strong) NSMutableArray *groupArrays;
@property (nonatomic,strong) UIImageView *litimgView;
@end```
在本例中我仅只用了一个uiimageview去获取一个视频的缩略图,各位如有需要可进行扩展
首先在viewdidload中
self.navigationItem.title = @"Demo";
self.view.backgroundColor = [UIColor clearColor];
// 初始化
self.groupArrays = [NSMutableArray array];
UIButton * btn1 = [UIButton buttonWithType:UIButtonTypeCustom];
btn1.frame = CGRectMake(50, 50, 100, 50);
btn1.backgroundColor = [UIColor orangeColor];
[self.view addSubview:btn1];
[btn1 addTarget:self action:@selector(testRun) forControlEvents:UIControlEventTouchUpInside];
// 图片或者视频的缩略图显示
self.litimgView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 120, 120)];
[self.view addSubview:_litimgView];
再然后获取视频和照片
-(void)run
{
__weak ViewController *weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
if (group != nil) {
[weakSelf.groupArrays addObject:group];
} else {
[weakSelf.groupArrays enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[obj enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if ([result thumbnail] != nil) {
// 照片
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]){
// NSDate *date= [result valueForProperty:ALAssetPropertyDate];
// UIImage *image = [UIImage imageWithCGImage:[result thumbnail]];
// NSString *fileName = [[result defaultRepresentation] filename];
// NSURL *url = [[result defaultRepresentation] url];
// int64_t fileSize = [[result defaultRepresentation] size];
//
// NSLog(@"date = %@",date);
// NSLog(@"fileName = %@",fileName);
// NSLog(@"url = %@",url);
// NSLog(@"fileSize = %lld",fileSize);
//
// // UI的更新记得放在主线程,要不然等子线程排队过来都不知道什么年代了,会很慢的
// dispatch_async(dispatch_get_main_queue(), ^{
// self.litimgView.image = image;
// });
NSLog(@"读取到照片了");
}
// 视频
else if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo] ){
NSURL *url = [[result defaultRepresentation] url];
UIImage *image = [UIImage imageWithCGImage:[result thumbnail]]; NSLog(@"%@",url);
dispatch_async(dispatch_get_main_queue(), ^{
self.litimgView.image = image;
});
// 和图片方法类似
}
}
}];
}];
}
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
NSString *errorMessage = nil;
switch ([error code]) {
case ALAssetsLibraryAccessUserDeniedError:
case ALAssetsLibraryAccessGloballyDeniedError:
errorMessage = @"用户拒绝访问相册,请在<隐私>中开启";
break;
default:
errorMessage = @"Reason unknown.";
break;
}
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"错误,无法访问!"
message:errorMessage
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil, nil];
[alertView show];
});
};
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:listGroupBlock failureBlock:failureBlock];
});
}