无法使用UIImagePicker平移从相机拍摄的图像

时间:2017-01-17 20:39:17

标签: ios swift xcode uiimage uiimagepickercontroller

我正在使用UIImagePicker让用户拍照。拍摄照片时,我希望它们平移和缩放图像以适应裁剪框内部,以便将图像存储为正方形。

然而,在裁剪图像时,似乎无法将其移动到(纵向)图像的顶部和底部(如果是横向,则左右移动)。

我尝试过搜索,但似乎没有太多信息,但这似乎是一个大问题。

有人可以帮忙吗?

这是我正在使用的极少量代码:

chart.group()

显然有更多的代码,但这是主要部分。

用照片编辑:

reference

所以我希望能够移动照片/放大以选择要保存的任何方形部分。但是,我无法从这个位置移动/继续抢回。

我可以放大,但它仍限制我从顶部和底部边缘。

同样,它适用于photoLibrary。

4 个答案:

答案 0 :(得分:5)

这是iOS 6中引入的一个错误,尚未修复。

雷达于2012年因此被提出,但由Apple关闭。我设法让它再次打开,并且在过去的6个月里一直纠缠着我的联系人中的Apple开发者。

http://openradar.appspot.com/12318774

在Apple确定之前,唯一的选择是使用第三方控件或自己动手。

这是我打开的雷达......

http://openradar.appspot.com/28260087

答案 1 :(得分:0)

我知道你说它已经放大了,但你可能只需要调整它的界限。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    image.image = info[UIImagePickerControllerEditedImage] as? UIImage
    self.dismiss(animated: true, completion: nil)
}

您可能还需要使用CGRect在屏幕中正确设置图像。它应该居中。如果您使用的是iphone 5,尺寸为640 x 1136。

这是因为图像的宽度或高度最大化到屏幕上。

答案 2 :(得分:0)

我使用了以下链接提供的解决方案: -

https://github.com/Hipo/HIPImageCropper

它处理图像的横向和potrait对齐,并提供放大和缩小裁剪功能。

希望这有帮助。

答案 3 :(得分:0)

如果已在info.plist中将“基于视图控制器的状态栏外观”设置为“否”,并使用来将状态栏外观设置为浅色

UIApplication.shared.statusBarStyle = .lightContent

或使用任何其他方法,然后在显示图像选择器之前将样式设置为.default即可。例如:

imagePicker.allowsEditing = true
imagePicker.sourceType = .photoLibrary
UIApplication.shared.statusBarStyle = .default
present(imagePicker, animated: true, completion: nil)

根据需要更改源类型,如photoLibrary或camera,然后在didFinishPickingMediaWithInfo的完成区域中将以下内容添加到完成区域。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    //let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage

    var pickedImage : UIImage?
    if let img = info[UIImagePickerControllerEditedImage] as? UIImage
    {
        pickedImage = img

    }
    else if let img = info[UIImagePickerControllerOriginalImage] as? UIImage
    {
        pickedImage = img
    }
    dismiss(animated: true, completion: {
        UIApplication.shared.statusBarStyle         = .lightContent
    })}

显然,这是解决该问题的方法。希望这会有所帮助。