2015-05-19 3 views
9

Das Problem, das gegenüberstellt, ist, das Bild, das ich wähle, von der Galerie in die UIImageView (imageChosen) zu setzen.Einstellung des Bildes, das von der Galerie zur UIImageView genommen wird

Der Code läuft ohne Fehler in Ordnung, aber das Bild, das ich gesetzt wählte nicht auf die „imageChosen“

hier ist mein Code

class postChoices: UIViewController { 

    @IBOutlet weak var imageChosen: UIImageView! 

    @IBAction func gallery(sender: AnyObject) { 

     var image = UIImagePickerController() 
     //image.delegate = self 
     image.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
     image.allowsEditing = false 

     self.presentViewController(image, animated: true, completion: nil) 

    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 

      // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image2: UIImageView!, editingInfo: NSDictionary!) { 
     // let selectedImage : UIImageView = image 
     imageChosen.image = image2.image 

    } 


} 
+0

@adnan nicht funktioniert hat, ist Hinzufügen der imageChosen innerhalb der gleichen Ansicht, self.view –

+0

@adnan in Ordnung, ist Überprüfung jetzt –

+0

@adnan habe ich diesen Code hier http://www.theappguruz.com/ blog/user-interaction-camera-using-uiimagepickercontroller-swift /, alles was ich will, so legte das Bild in das ImageView, ohne die Schaltflächen zu erstellen, danke –

Antwort

4
//Complete solution with delegates and image handling  

    import UIKit 

     class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { 

      @IBOutlet weak var myImageView: UIImageView! 
      let picker = UIImagePickerController() 

      @IBAction func gallery(sender: AnyObject) { 

       if UIImagePickerController.availableMediaTypesForSourceType(.PhotoLibrary) != nil { 
        picker.allowsEditing = false 
        picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
        presentViewController(picker, animated: true, completion: nil) 
       } else { 
        noCamera() 
       } 

      } 
      func noCamera(){ 
       let alertVC = UIAlertController(title: "No Camera", message: "Sorry, Gallery is not accessible.", preferredStyle: .Alert) 
       let okAction = UIAlertAction(title: "OK", style:.Default, handler: nil) 
       alertVC.addAction(okAction) 
       presentViewController(alertVC, animated: true, completion: nil) 
      } 

      override func viewDidLoad() { 
       super.viewDidLoad() 
       // Do any additional setup after loading the view, typically from a nib. 
       picker.delegate = self //the required delegate to get a photo back to the app. 
      } 

      //MARK: - Delegates 
      //What to do when the picker returns with a photo 
      func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { 
       var chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //2 
       myImageView.contentMode = .ScaleAspectFit //3 
       myImageView.image = chosenImage //4 
       dismissViewControllerAnimated(true, completion: nil) //5 
      } 
      //What to do if the image picker cancels. 
      func imagePickerControllerDidCancel(picker: UIImagePickerController) { 
       dismissViewControllerAnimated(true, completion: nil) 
      } 
     } 

Demo Project

+0

Verwenden Sie imageChosen anstelle von myImageView.Just Check Logik, Variable Namen ist egal –

+0

Vielen Dank, es funktioniert jetzt –

+0

Wissen Sie, wie kann ich zu einer anderen Ansicht wechseln, nachdem ich ein Bild aus der Galerie gewählt habe, ich meine, gibt es eine Möglichkeit, es zu tun, vielleicht innerhalb von segue oder andere Funktion –

2

mehrere Probleme.

Wenn Sie die Dokumente betrachten, wurde die Methode imagePickerController:didFinishPickingImage:editingInfo: in iOS 3.0 veraltet.

Es ist eine faire Wette, dass es nicht einmal aufgerufen wird. (Sie haben die Zeile, die Ihren View-Controller als Delegierter einrichtet Kommentar gesetzt, so dass die Kommissionierer Bild wird Ihre Delegatmethoden nicht nennen.

In Ihrer imagePickerController:didFinishPickingImage:editingInfo: Methode Sie image2 als UIImageView definiert haben. Es ist nicht, es ist ein UIImage.

Sie sollten die Zeile image.delegate = self un-Stellung zu nehmen.

Sie sollten die Methode imagePickerController:didFinishPickingMediaWithInfo: statt imagePickerController:didFinishPickingImage:editingInfo: implementieren.

Sie wahrscheinlich müssen auch UIImagePickerControllerDelegate zum definitio hinzufügen n Ihrer View-Controller-Klasse, so dass der Compiler weiß, dass Ihr View-Controller dem Protokoll UIImagePickerControllerDelegate entspricht.

+0

, wenn ich den Kommentar in der Zeile bild.delegate = self herausnehmen, ein Fehler zeigt, sagen Kann nicht einen Wert vom Typ 'PostChoice' auf einen Wert des Typs 'Protokoll

+0

Ok, dann Sie müssen Ihrer Klasse UIImagePickerControllerDelegate hinzufügen: 'class myVC: UIViewController, UIImagePickerControllerDelegate'. Das teilt dem Compiler mit, dass Ihre Klasse dem Protokoll "UIImagePickerControllerDelegate" entspricht. –

2
- (void) makeUIImagePickerControllerForCamera:(BOOL)camera { 

     UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
     picker.delegate = self; 
     picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 

     [picker setMediaTypes:[NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil]]; 

     [self presentModalViewController: picker animated: YES]; 
    } 

    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
     // Dismiss the picker 
     [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 

    // Get the image from the result 
    UIImage* image = [info valueForKey:@"UIImagePickerControllerOriginalImage"]; 

    myUIImage.image = image; 
} 
0

Dieser Code hat mir geholfen, mit schnellen 3,0

internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
     billImageView.contentMode = .scaleAspectFill 
     billImageView.image = pickedImage 
    } 
    self.dismiss(animated: true, completion: nil) 
} 

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
    self.dismiss(animated: true, completion: nil) 
} 
0

In Swift 3.0 in diesem Code, den Sie beide Option Kamera wählen haben und Gallary

import UIKit 
import Foundation 
import AVFoundation 
class HostVC: UIViewController, UIImagePickerControllerDelegate,UINavigationControllerDelegate{  
@IBOutlet weak var imgHostProfile:UIImageView! 
    let captureSession = AVCaptureSession() 
    let stillImageOutput = AVCaptureStillImageOutput() 
    var previewLayer : AVCaptureVideoPreviewLayer? 
    var captureDevice : AVCaptureDevice? 

@IBAction func btnChangeprofileTapped(_ sender: UIButton) 
    { 


     DispatchQueue.main.async 
      { 
       let alert = UIAlertController(title: "Alert", message: "Choose profile picture from Camera or Gallery", preferredStyle: UIAlertControllerStyle.alert) 
       alert.addAction(UIAlertAction(title: "Take a photo", style: UIAlertActionStyle.default, handler: { (action: UIAlertAction!) in 
        DispatchQueue.main.async 
         { 
          if AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo) == AVAuthorizationStatus.authorized { 
           self.Cemara() 
          } else { 
           AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo, completionHandler: { (granted: Bool) -> Void in 
            if granted == true { 
             self.Cemara() 
            } else { 
             self.showalert(strMessage: Validation.kCameraAccess) 
            } 
           }) 
          } 

        } 
       })) 
       alert.addAction(UIAlertAction(title: "Choose from Library", style: UIAlertActionStyle.default, handler: { (action: UIAlertAction!) in 
        DispatchQueue.main.async 
         { 
          let imagepicker = UIImagePickerController() 
          imagepicker.delegate = self 
          imagepicker.sourceType = .photoLibrary 

          self.present(imagepicker, animated: true, completion: nil) 
        } 
       })) 

       alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.default, handler: { (action: UIAlertAction!) in})) 

       self.present(alert, animated: true, completion: nil) 

     } 


    } 

    func Cemara() 
    { 
     DispatchQueue.main.async { 
      if UIImagePickerController.availableCaptureModes(for: .rear) != nil 
      { 
       let imagePicker = UIImagePickerController() 
       imagePicker.delegate = self 
       imagePicker.sourceType = .camera 
       self.present(imagePicker, animated: true, completion: nil) 
      } 
      else 
      { 
       self.noCamera() 
      } 
     } 
    } 

    //====================================================================== 
    //     MARK: - Camera Code 
    //====================================================================== 

    func noCamera() 
    { 
     captureSession.sessionPreset = AVCaptureSessionPresetHigh 
     if let devices = AVCaptureDevice.devices() as? [AVCaptureDevice] 
     { 
      for device in devices 
      { 
       if (device.hasMediaType(AVMediaTypeVideo)) 
       { 
        if(device.position == AVCaptureDevicePosition.front) 
        { 
         captureDevice = device 
         if captureDevice != nil 
         { 
          print("Capture device found") 
          beginSession() 
         } 
        } 
       } 
      } 
     } 
    } 

    //====================================================================== 
    //     MARK: - Camera Capture Start Session Code Here 
    //====================================================================== 

    func beginSession() 
    { 
     do 
     { 
      try captureSession.addInput(AVCaptureDeviceInput(device: captureDevice)) 
      stillImageOutput.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG] 
      if captureSession.canAddOutput(stillImageOutput) 
      { 
       captureSession.addOutput(stillImageOutput) 
      } 
     } 
     catch 
     { 
      print("error: \(error.localizedDescription)") 
     } 
     guard let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) else 
     { 
      print("no preview layer") 
      return 
     } 
     self.view.layer.addSublayer(previewLayer) 
     previewLayer.frame = self.view.layer.frame 
     captureSession.startRunning() 
     self.view.addSubview(imgHostProfile) 


    } 

    //====================================================================== 
    //     MARK: - Gallary Code 
    //====================================================================== 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
    { 
     if let imagedata = info[UIImagePickerControllerOriginalImage] as? UIImage 
     { 
      self.imgHostProfile.image = imagedata 
      print(imagedata) 


     } 

     dismiss(animated: true, completion: nil) 
    } 
Verwandte Themen