UIImagePickerController allowedEditing=YES 仅适用于视频
Posted
技术标签:
【中文标题】UIImagePickerController allowedEditing=YES 仅适用于视频【英文标题】:UIImagePickerController allowsEditing=YES just for video 【发布时间】:2013-12-04 11:01:04 【问题描述】:我正在使用UIImagePickerController
让用户选择照片或视频。我面临的问题是,我使用自己的图像编辑器来处理照片,所以想要 allowsEditing=NO
来处理照片,但是视频必须有一定的长度,所以我想要 allowsEditing=YES
来处理视频。
为图像选择器设置videoMaximumDuration
可以在录制视频时正常工作,但如果从相机胶卷中选择,它只会在启用allowsEditing
时通知用户视频太长。
到目前为止,我可以在使用相机时通过监听ImageControlModeChanged
通知成功更改allowsEditing
属性。然后我可以使用以下方法更改属性:
- (void)imageCaptured:(NSNotification *)notification
if (imagePicker.cameraCaptureMode == UIImagePickerControllerCameraCaptureModeVideo)
imagePicker.allowsEditing = YES;
else
imagePicker.allowsEditing = NO;
但是,当从相机胶卷中选择时,这不起作用。我已经监控了通知,但看不到一个对更改 allowsEditing
属性有用的通知,具体取决于所选项目。
这可能吗?
谢谢
【问题讨论】:
【参考方案1】:为什么不创建 2 个甚至 4 个 UIImagePickerController
s 而不是乱搞通知?
- (void) useCamera
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera])
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
(NSString *) kUTTypeImage,
nil];
imagePicker.allowsEditing = NO;
[self presentViewController:imagePicker animated:YES completion:nil];
- (void) useCameraRoll
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeSavedPhotosAlbum])
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage,nil];
imagePicker.allowsEditing = NO;
[self presentViewController:imagePicker animated:YES completion:nil];
- (void)videoRoll
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeSavedPhotosAlbum])
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
(NSString *) kUTTypeImage,
nil];
imagePicker.allowsEditing = YES;
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
[self presentViewController:imagePicker animated:YES completion:nil];
- (void)vidCam
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeSavedPhotosAlbum])
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
(NSString *) kUTTypeImage,
nil];
imagePicker.allowsEditing = NO;
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
[self presentViewController:imagePicker animated:YES completion:nil];
编辑:
在更好地理解了这个问题之后,我认为这是不可能的。您可以使用一些通知,但这些通知没有记录在任何地方,也没有在 ios7 上运行。如果真的是这样,我能想到的最好的解决方案是使用 github.com/andrei200287/SAVideoRangeSlider 和 allowsEditing = NO
之类的第 3 方。
【讨论】:
谢谢Sha,但这并不能解决问题。使用pictureRoll 时,我需要编辑=YES 用于视频,编辑=NO 用于照片 嗯,请参阅我编辑的答案。根据您的需要更改您的allowEditing。这涵盖了您可以从 cam\video 选择中获得的所有状态。 我可以确认上面的代码对我有用。使用相机胶卷中的视频,您将能够对其进行编辑。对于图片,您将无法编辑,并且选择器视图控制器将在选择图像时自行关闭。 是的,对于 4 个不同的场景有 4 个选择器,但是如何在它们之间切换?我不希望他们必须事先选择他们想要的媒体类型。他们启动相机胶卷,它同时显示视频和照片。如何限制照片不可编辑但视频可编辑? 在这种情况下,我能想到的唯一解决方案是使用第 3 方,例如 github.com/andrei200287/SAVideoRangeSlider,并且对于所有内容都允许编辑 = NO。【参考方案2】:试试这个 在视图中分配属性确实加载了,而不是在 imageCaptured 方法中。它工作正常
videoController.delegate = self;
videoController.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;
videoController.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:videoController.sourceType];
videoController.allowsEditing = YES;
【讨论】:
这有什么帮助?这只是将allowsEditing=YES
分配给任何不是我想要的选择或记录的内容。
@Aklesh 你介意解释你的解决方案吗?我不明白它与任何事情有什么关系。
@AkleshRathaur 将所有答案合并为一个。这没用。以上是关于UIImagePickerController allowedEditing=YES 仅适用于视频的主要内容,如果未能解决你的问题,请参考以下文章
使用UIImagePickerController时3DTouch引起Crash
iOS-系统 图片视频 管理控制器UIImagePickerController