为UIImagePicker添加圆形裁剪组件?

问题描述 投票:0回答:3

我有一个圆形框

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

更新

我找到了这个带有圆形裁剪工具的存储库 https://github.com/ruslanskorb/RSKImageCropper

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

更新

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

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

这是我的代码:

  @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)

        })

    }
ios swift uiimageview uiimagepickercontroller
3个回答
20
投票

示例演示

是的,您可以在您的

RSKImageCropper
 中添加 
UIImagePickerController

定义

imagePicker

var imagePicker : UIImagePickerController!

ViewDidLoad

    imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary;
    self.presentViewController(imagePicker, animated: true, completion: nil)

委托方法:

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)

    })

}

参见:


5
投票

基里特·莫迪的答案正是我所需要的,尽管我需要做一件事才能使这项工作成功。对于那些不下载测试项目的人,请确保实现您的委托方法:

斯威夫特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)
    }

}

斯威夫特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)
    }

}

0
投票

对于 Swift 2.2:

将委托方法添加到您的类中:

class ViewController: UIViewController, UIImagePickerControllerDelegate, RSKImageCropViewControllerDelegate, UINavigationControllerDelegate 

定义imagePicker

    var imagePicker : UIImagePickerController!

在viewDidLoad()中

imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
self.presentViewController(imagePicker, animated: true, completion: nil)

和委托方法:

func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) {

    let image : UIImage = image
    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)  
    })  
}

当然需要为目标C级做桥梁

哦,链接到 RSKImageCrop

© www.soinside.com 2019 - 2024. All rights reserved.