我正在使用 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
属性有用的通知。
这可能吗?
谢谢
最佳答案
为什么不创建 2 个甚至 4 个 UIImagePickerController
而不是乱用通知?
- (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
来处理所有问题。
关于ios - UIImagePickerController allowsEditing=YES 仅用于视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373565/