为UIImagePicker添加循环裁剪组件?

Joh*_*and 8 uiimageview uiimagepickercontroller ios swift

我有一个圆形框架UIImageView,我需要在UIImagePickerController从照片库中选择图像后为其添加圆形框架裁剪工具.与Instagram的UIImagePicker's裁剪组件非常相似.如何添加此类组件?

UPDATE

我发现这个回购用圆形裁剪工具https://github.com/ruslanskorb/RSKImageCropper

但有人可以指导我如何在用户从照片库中选择照片后使用UIImagePickerController实现此裁剪工具吗?

UPDATE

我在调试器中收到以下消息:

在此输入图像描述

并且我的裁剪视图中的按钮被禁用,这意味着我无法选择它们.调试器会向我转发什么消息?

这是我的代码:

  @IBAction func chooseProfilePicture(sender: AnyObject) {

        var myPickerController = UIImagePickerController()
        myPickerController = UIImagePickerController()
        myPickerController.delegate = self;
        myPickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary

        self.presentViewController(myPickerController, animated: true, completion: nil)
    }

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

        var image : UIImage = (info[UIImagePickerControllerOriginalImage] as? UIImage)!

        editProfilePictureImageView.image = image

        self.dismissViewControllerAnimated(false, completion: { () -> Void in

            var imageCropVC : RSKImageCropViewController!

            imageCropVC = RSKImageCropViewController(image: image, cropMode: RSKImageCropMode.Circle)

            imageCropVC.delegate = self

            self.navigationController?.pushViewController(imageCropVC, animated: true)

        })

    }
Run Code Online (Sandbox Code Playgroud)

Kir*_*odi 18

示例演示

是的,你可以加入RSKImageCropper你的UIImagePickerController

限定 imagePicker

var imagePicker : UIImagePickerController!
Run Code Online (Sandbox Code Playgroud)

ViewDidLoad

    imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary;
    self.presentViewController(imagePicker, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

代表方法:

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

    var image : UIImage = (info[UIImagePickerControllerOriginalImage] as? UIImage)!

    picker.dismissViewControllerAnimated(false, completion: { () -> Void in

        var imageCropVC : RSKImageCropViewController!

        imageCropVC = RSKImageCropViewController(image: image, cropMode: RSKImageCropMode.Circle)

        imageCropVC.delegate =self

        self.navigationController?.pushViewController(imageCropVC, animated: true)

    })

}
Run Code Online (Sandbox Code Playgroud)

看:

在此输入图像描述


Jos*_*nor 5

Kirit Modi 的回答正是我所需要的,尽管我需要做一件事来完成这项工作。对于那些不下载测试项目的人,请确保实现您的委托方法:

斯威夫特 3:

extension YourViewControllerClass: RSKImageCropViewControllerDelegate {

    func imageCropViewControllerDidCancelCrop(_ controller: RSKImageCropViewController) {
        _ = self.navigationController?.popViewController(animated: true)
    }

    func imageCropViewController(_ controller: RSKImageCropViewController, didCropImage croppedImage: UIImage, usingCropRect cropRect: CGRect) {
        self.avatarImageView.image = croppedImage
        _ = self.navigationController?.popViewController(animated: true)
    }

}
Run Code Online (Sandbox Code Playgroud)

斯威夫特 2:

extension YourViewControllerClass: RSKImageCropViewControllerDelegate {

    func imageCropViewControllerDidCancelCrop(controller: RSKImageCropViewController) {
        self.navigationController?.popViewControllerAnimated(true)
    }

    func imageCropViewController(controller: RSKImageCropViewController, didCropImage croppedImage: UIImage, usingCropRect cropRect: CGRect) {
        self.avatarImageView.image = croppedImage
        self.navigationController?.popViewControllerAnimated(true)
    }

}
Run Code Online (Sandbox Code Playgroud)