UIImagePickerController如何实现从后置摄像头切换到前置摄像头的动画效果?

21

我一直在使用UIImagePickerController控制器的自定义叠加层,并且一切都运作良好。我已经添加了一个按钮,通过 - 方法来切换前置和后置摄像头。

 - (IBAction)changeCamera:(id)sender {
if (self.imagePicker.cameraDevice == UIImagePickerControllerCameraDeviceRear) {
    self.imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
}
else {
    self.imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
}
}

问题是,开关没有动画效果。我一直在使用苹果相机应用程序,它是建立在UIImagePicker之上的,并且该开关具有动画效果。我该如何实现这个效果?


我正在使用UIBarButtonItem。用开关切换从后置到前置摄像头,并进行动画处理,就像在苹果应用程序中水平翻转一样。 - MegaManX
UIImagePickerController确实有视图属性,但我不是那个在视图之间进行转换的人,这是在我设置相机设备属性后自动完成的。 - MegaManX
2个回答

25

我今天尝试做这件事情,使用以下代码后我成功了:

[UIView transitionWithView:imagePickerController.view duration:1.0 options:UIViewAnimationOptionAllowAnimatedContent | UIViewAnimationOptionTransitionFlipFromLeft animations:^{
            imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear;
        } completion:NULL];

我希望这可以帮助任何遇到这个问题的人。


谢谢你的回答。它提供了我所寻找的正确过渡,但是相机视图之间的过渡仍然会有些闪烁(在完成过渡之前未设置cameraDevice)。我不确定是否应该只增加动画持续时间,因为该值在旧款iPad上可能会有所不同。你有什么想法吗?我正在考虑截屏并从那里过渡到图像选择器。 - Kevin Zych
是的,我有同样的问题 - 变换是一个好主意 - 但是苹果没有给你完成回调,所以计时不准确。 - daihovey
1
这个解决方案的问题在于它也翻转了相机叠加视图,这不是苹果在他们自己的相机应用中的做法。 - HiveHicks

6

如果有人需要,这是被接受的答案的Swift代码:

UIView.transitionWithView(imagePickerController.view!, duration: 1.0, options: [.AllowAnimatedContent, .TransitionFlipFromLeft], animations: {() -> Void in
            imagePickerController.cameraDevice = .Rear
            }, completion: nil)

感谢Pablo!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接