2015-08-25 7 views
5

Ich habe einen kreisförmigen Rahmen UIImageView und ich muss ein kreisförmiges gerahmtes Zuschneiden Werkzeug für die UIImagePickerController hinzufügen, nachdem das Bild aus einer Fotobibliothek ausgewählt ist. Sehr ähnlich zu Instagrams UIImagePicker's Erntegutkomponente. Wie füge ich diesen Komponententyp hinzu?Fügen Sie eine kreisförmige Beschneidungskomponente für UIImagePicker hinzu?

UPDATE

ich diesen Repo mit einem kreisförmigen Zuschneidetool von https://github.com/ruslanskorb/RSKImageCropper

aber kann jemand mich leiten auf, wie zu implementieren dieses Zuschneidetool mit dem UIImagePickerController, nachdem der Benutzer ein Foto auswählt gefunden haben die Fotobibliothek?

UPDATE

ich die folgende Meldung in meinem Debugger bin immer:

enter image description here

und die Schaltflächen in meiner Ernte Ansicht sind deaktiviert, was bedeutet, ich kann sie nicht .. wählen können, welche Meldung der Debugger weiter zu mir?

hier ist mein Code:

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

     }) 

    } 
+0

kann dies in dem UIImagePicker umgesetzt werden? @KiritModi –

+0

Ich bin Demo Demo in meiner Antwort herunterladen und starten Sie es. –

+0

Ok, jetzt funktioniert .. !! –

Antwort

13

Example Demo

Ja Sie RSKImageCropper in Ihrem UIImagePickerController

definieren imagePicker

var imagePicker : UIImagePickerController! 

in ViewDidLoad hinzufügen

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) 

    }) 

} 

siehe:

enter image description here

+0

jede Chance, die Sie in schnell umwandeln können? –

+0

ok lassen Sie mich wissen, wenn Sie Antwort auf schnelle –

+0

aktualisieren Sie wissen, wie objektive C-Klasse in swift verwenden –

2

Kirit Modis Antwort war genau das, was ich brauchte, obwohl ich eine Sache zu tun nötig, um diese Arbeit zu machen. Für diejenigen, die das Testprojekt herunterladen nicht, stellen Sie sicher, dass Ihre Stellvertretung Methoden implementieren:

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

Ich kann dies nicht in meinem Projekt hinzufügen, können Sie mir sagen, wie ich das erreichen kann. Ich möchte eine kreisförmige Komponente hinzufügen, um das Bild zu bearbeiten. –

+0

Ich kann dir helfen. Haben Sie die RSKImageCropView-Bibliothek hinzugefügt? Sie können entweder cocoaPod verwenden oder die gesamte Bibliothek zu Ihrem Projekt ziehen. –

+0

Kannst du mir den genauen Link für RSKImageCropView liefern, arbeite ich mit swift 2.2. –

0

für Swift 2.2:

add Delegatmethoden Ihrer Klasse:

class ViewController: UIViewController, UIImagePickerControllerDelegate, RSKImageCropViewControllerDelegate, UINavigationControllerDelegate 

imagePicker definieren

var imagePicker : UIImagePickerController! 

in viewDidLoad()

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

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

Natürlich brauchen sie Brücke für Objective-C-Klasse

Oh, Link zu tun, um RSKImageCrop

Verwandte Themen