为UIImagePicker添加圆形裁剪组件?

我有一个圆形框架的UIImageView ,我需要添加一个圆形框架裁剪工具的UIImagePickerController后,从图片库中select图像。 非常类似于Instagram的UIImagePicker's裁剪组件。 我如何添加这种types的组件?

UPDATE

我find了一个圆形的裁剪工具回购https://github.com/ruslanskorb/RSKImageCropper

但有人可以指导我怎么用UIImagePickerController这个裁剪工具后,用户从照片库中select一张照片?

UPDATE

我在debugging器中收到以下消息:

在这里输入图像说明

我的裁剪视图中的button被禁用,这意味着我不能select他们..debugging器传递给我什么信息?

这里是我的代码:

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

示例演示

是的,你可以在你的UIImagePickerController添加RSKImageCropper

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

见:

在这里输入图像说明

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

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

对于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