use*_*703 6 iphone xcode uiimagepickercontroller
我正在尝试获取有关我选择的视频的一些数据UIImagePicker.
因此当它进入UIImagePicker委托方法(下面)时,我理解我需要使用UIImagePickerControllerReferenceURL信息字典中的密钥.
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL];
NSLog(@"%@",url);
[library addAssetURL:[info objectForKey:UIImagePickerControllerReferenceURL] toAlbum:@"Compedia" withCompletionBlock:^(NSError *error) {
if (error!=nil) {
NSLog(@"Big error: %@", [error description]);
}
}];
}
Run Code Online (Sandbox Code Playgroud)
问题是网址是零.我打印了信息的描述,它看起来像这样:
Printing description of info:
{
UIImagePickerControllerMediaType = "public.movie";
UIImagePickerControllerMediaURL = "file://localhost/private/var/mobile/Applications/6630FBD3-1212-4ED0-BC3B-0C23AEEFB267/tmp/capture-T0x1f57e880.tmp.Ulfn5o/capturedvideo.MOV";
}
Run Code Online (Sandbox Code Playgroud)
在我完成一些研究后,我发现如果我设置相机,kUTTypeMovie它应该给我媒体和参考网址.
这就是我定义相机的方式:
cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil];
cameraUI.allowsEditing = YES;
cameraUI.delegate = delegate;
cameraUI.showsCameraControls = NO;
cameraUI.cameraOverlayView = [self getCustomToolBar];
Run Code Online (Sandbox Code Playgroud)
有什么我想念的吗?
谢谢,
ssh*_*h88 13
这个几乎疯了.每一个我看过的地方似乎都相信每个人都在UIImagePickerControllerReferenceURL那里.
无论如何,问题是如果你使用相机拍摄照片之后调用你的代表,那么UIImagePickerControllerReferenceURL因为图像还没有保存到相机胶卷,所以没有UIImagePickerControllerReferenceURL.只有在从相机胶卷中选择图像后调用代表时才会出现.
所以我的方法是使用ALAssetLibrary将其保存到相机胶卷然后读回URL.
继承人我的解决方案:
首先,您要检测PickerControllersourceType以查看它是相机还是photosLibrary/ savedPhotosAlbum.如果它是相机,那么我们使用资产库的writeImageToSavedPhotosAlbum:orientation:completionBlock:将图像写入相机胶卷,并在完成块中返回图像URL.
但是,如果它不是摄像机,那么这意味着是两者photosLibrary或savedPhotosAlbum两者[info objectForKey:UIImagePickerControllerReferenceURL]都会返回一个有效的URL
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//dismiss the imagepicker view
[self dismissViewControllerAnimated:YES completion:nil];
if( [picker sourceType] == UIImagePickerControllerSourceTypeCamera )
{
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
ALAssetsLibrary *library = [Utils defaultAssetsLibrary];
[library writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error )
{
//here is your URL : assetURL
}];
}
else
{
//else this is valid : [info objectForKey:UIImagePickerControllerReferenceURL]];
}
Run Code Online (Sandbox Code Playgroud)
}
希望有所帮助.