为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