初始填充 UIImagePickerController 的图像

Image to Initially Fill UIImagePickerController

在我的 iOS 应用程序中,我想从照片库中抓取图像并将它们裁剪为正方形格式。 UIImagePickerController 很好地处理了这一点,但有一个小问题:当我 select 从库中取出一张横向照片时,它没有填充裁剪区域(对于纵向图像,它填充)。这允许用户 select 非正方形区域。 有没有办法强制图像选择器垂直填充裁剪区域就像它水平填充一样 - 而无需实现我自己的图像选择器?

我的代码:

class AddProfileViewController: UIViewController, UIGestureRecognizerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var profileImageView: EnhancedImageView!
    let imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()

        // ...

        imagePicker.delegate = self
    }

    func profileImageTapped() {
        imagePicker.allowsEditing = true
        imagePicker.sourceType = .PhotoLibrary
        presentViewController(imagePicker, animated: true, completion: nil)
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        // ...
    }

    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        dismissViewControllerAnimated(true, completion: nil)
    }
}

选择一张风景图片,看起来是这样的:

相反,我希望图像水平和垂直延伸到裁剪框,因此图像选择器将始终 return 方形图像。

要结束这个问题——我是这样解决的:

使用标准图像选择器似乎无法将图像垂直扩展到边界。选项是创建您自己的图像选择器或使用以下解决方法,这在大多数情况下可能就足够了:

如果用户没有放大图像的任何部分,则图像的中心最接近用户想要的效果,您可以通过切掉两边等宽的切片来获得正方形图像。

我在故事板 (90x90) 中指定了图像视图的高度和宽度,并在故事板中选择了纵横比填充和裁剪到边界。如果用户不放大,图像将从中心裁剪为 90x90。