最近做一个聊天的项目,需要发送图片后读取本地图片显示到列表里。刚开始的时候,天真的认为可以用SDWebImage直接加载,然后并不能行。
于是在网上搜了搜,如何根据从相册获取的UIImagePickerControllerReferenceURL读取图片, 代码如下:
#import "ViewController.h" #import <AssetsLibrary/AssetsLibrary.h> @interface ViewController ()<UINavigationControllerDelegate, UIImagePickerControllerDelegate> - (IBAction)showImagePickerVC:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; }
弹出图片选择器
- (IBAction)showImagePickerVC:(id)sender { UIImagePickerController *imagePickerVC = [[UIImagePickerController alloc] init]; imagePickerVC.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePickerVC.allowsEditing = YES; imagePickerVC.delegate = self; [self presentViewController:imagePickerVC animated:YES completion:nil]; }
回调
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSLog(@"%@", info); NSURL *imagePath = info[@"UIImagePickerControllerReferenceURL"]; if ([[[imagePath scheme] lowercaseString] isEqualToString:@"assets-library"]) { // Load from asset library async dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @autoreleasepool { @try { ALAssetsLibrary *assetslibrary = [[ALAssetsLibrary alloc] init]; [assetslibrary assetForURL:imagePath resultBlock:^(ALAsset *asset){ ALAssetRepresentation *rep = [asset defaultRepresentation]; CGImageRef iref = [rep fullScreenImage]; if (iref) { //进行UI修改 dispatch_sync(dispatch_get_main_queue(), ^{ _imageView.image = [[UIImage alloc] initWithCGImage:iref]; }); } } failureBlock:^(NSError *error) { NSLog(@"从图库获取图片失败: %@",error); }]; } @catch (NSException *e) { NSLog(@"从图库获取图片异常: %@", e); } } }); } [picker dismissViewControllerAnimated:YES completion:nil]; }
时间: 2024-10-13 21:01:41