【问题标题】:UIImagePickerController allowsEditing=YES just for videoUIImagePickerController allowedEditing=YES 仅适用于视频
【发布时间】: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 属性有用的通知,具体取决于所选项目。

这可能吗?

谢谢

【问题讨论】:

    标签: ios video camera uiimagepickercontroller


    【解决方案1】:

    为什么不创建 2 个甚至 4 个 UIImagePickerControllers 而不是乱搞通知?

    - (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 将所有答案合并为一个。这没用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    相关资源
    最近更新 更多