最近的項(xiàng)目中需要獲取手機(jī)里的本地視頻钞它,找到相關(guān)資料比較麻煩晶衷,因此在此做分享
@interface ViewController ()
@property (nonatomic,strong) NSMutableArray *groupArrays;
@property (nonatomic,strong) UIImageView *litimgView;
@end```
在本例中我僅只用了一個(gè)uiimageview去獲取一個(gè)視頻的縮略圖,各位如有需要可進(jìn)行擴(kuò)展
首先在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的更新記得放在主線程,要不然等子線程排隊(duì)過(guò)來(lái)都不知道什么年代了,會(huì)很慢的
// 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;
});
// 和圖片方法類(lèi)似
}
}
}];
}];
}
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
NSString *errorMessage = nil;
switch ([error code]) {
case ALAssetsLibraryAccessUserDeniedError:
case ALAssetsLibraryAccessGloballyDeniedError:
errorMessage = @"用戶拒絕訪問(wèn)相冊(cè),請(qǐng)?jiān)?lt;隱私>中開(kāi)啟";
break;
default:
errorMessage = @"Reason unknown.";
break;
}
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"錯(cuò)誤,無(wú)法訪問(wèn)!"
message:errorMessage
delegate:self
cancelButtonTitle:@"確定"
otherButtonTitles:nil, nil];
[alertView show];
});
};
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:listGroupBlock failureBlock:failureBlock];
});
}