Add a circular cropping component for UIImagePicker?

后端 未结 3 544
刺人心
刺人心 2020-12-13 16:43

I Have a circular framed UIImageView and I need to add a circular framed cropping tool for the UIImagePickerController, after the image is selected

相关标签:
3条回答
  • 2020-12-13 17:42

    Kirit Modi's answer was exactly what I needed, although I needed to do one thing to make this work. For those that dont download the test project, make sure to implement your delegate methods:

    Swift 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)
        }
    
    }
    

    Swift 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 讨论(0)
  • 2020-12-13 17:43

    For Swift 2.2:

    add delegate methods to your class:

    class ViewController: UIViewController, UIImagePickerControllerDelegate, RSKImageCropViewControllerDelegate, UINavigationControllerDelegate 
    

    define imagePicker

        var imagePicker : UIImagePickerController!
    

    in viewDidLoad()

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

    And delegate methode :

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

    Of course it need to do bridge for objective C class

    Oh, link to RSKImageCrop

    0 讨论(0)
  • 2020-12-13 17:44

    Example Demo

    Yes you can add RSKImageCropper in your UIImagePickerController

    define imagePicker

    var imagePicker : UIImagePickerController!
    

    in ViewDidLoad

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

    Delegate methode :

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

    see :

    0 讨论(0)
提交回复
热议问题