当我按下快门按钮后在我的应用中拍照时,图像预览会水平镜像。我知道这样做是为了模仿镜子,但我不希望在我的应用程序上出现这种行为。我希望它像 instagram 那样在没有翻转的情况下拍摄前置摄像头照片。我知道如何翻转照片,即:
UIImage * flippedImage = [UIImage imageWithCGImage:picture.CGImage scale:picture.scale orientation:UIImageOrientationLeftMirrored];
但这是我要翻转的预览图像(带有“重拍”和“使用照片”的图像)。任何想法如何去做?我想我需要重写 UIImagePicker 类中的某些内容。
谢谢
Best Answer-推荐答案 strong>
我尝试了很多在 stackoverlfow 上描述的答案,但没有一个提供我想要的结果。 Eiter 整个 UIImagePickerViewController 都被转换了,所以相机不直观,不像照镜子,或者像你描述的那样只有图像被转换了,什么工作正常,但你有一个错误的预览中间的图像。所以我最终得到了这个 hack,它绝对不是最佳实践,但适用于 iOS8 和 9,并为我提供了我需要的结果。
确保添加观察者以在按下捕获图像按钮时获得通知:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "photoTaken", name: "_UIImagePickerControllerUserDidCaptureItem", object: nil)
在 potoTaken 方法中,您可以执行以下操作来查找预览图像并将其转换为您期望的样子:
func photoTaken() {
for subview in self.imagePicker.view.subviews {
for subsubview in subview.subviews {
for subsubsubview in subsubview.subviews {
for subsubsubsubview in subsubsubview.subviews {
for subsubsubsubsubview in subsubsubsubview.subviews {
for subsubsubsubsubsubview in subsubsubsubsubview.subviews {
for subsubsubsubsubsubsubview in subsubsubsubsubsubview.subviews {
if subsubsubsubsubsubsubview.isKindOfClass(UIImageView) {
subsubsubsubsubsubsubview.transform = CGAffineTransformScale(self.imagePicker.cameraViewTransform, -1, 1)
}
}
}
}
}
}
}
}
}
在您的 didFinishPickingMediaWithInfo 委托(delegate)中,在保存或显示之前再次翻转图像。
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
let flippedImage = UIImage(CGImage: pickedImage.CGImage!, scale: pickedImage.scale, orientation: .LeftMirrored)
myCustomPhotoAlbum.sharedInstance.saveImage(flippedImage)
self.imageView.image = flippedImage
}
self.dismissViewControllerAnimated(true, completion: nil)
}
关于ios - 从 iPhone 相机拍照后,图像在预览中翻转,我该如何反转?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/28065232/
|