2015-05-19 2 views
9

Il problema che sto affrontando è posizionare l'immagine che scelgo dalla galleria nel UIImageView (imageChosen).Impostazione dell'immagine scattata dalla galleria a UIImageView

Il codice viene eseguito bene senza errori ma il quadro ho scelto non è impostato il "imageChosen"

qui è il mio codice

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 non ha funzionato, sono l'aggiunta del imageChosen all'interno dello stesso avviso, self.view –

+0

@adnan va bene, sto controllando ora –

+0

@adnan ho visto questo codice qui http://www.theappguruz.com/ blog/user-interaction-camera-using-uiimagepickercontroller-swift /, tutto ciò che voglio è mettere l'immagine in imageView, senza creare i pulsanti, grazie –

risposta

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

usa imageChosen al posto di myImageView.Basta controllare la logica, i nomi delle variabili non importa –

+0

grazie mille, funziona ora –

+0

sai come posso passare a un'altra vista, dopo aver scelto un'immagine dalla galleria, voglio dire, c'è un modo per farlo, forse all'interno di seguito o con una diversa funzione –

2

Diversi problemi.

Se si osservano i documenti, il metodo imagePickerController:didFinishPickingImage:editingInfo: è stato dichiarato obsoleto in iOS 3.0.

È una buona scommessa che non viene nemmeno chiamato. (Hai la linea che imposta il controller della vista, come il delegato commentata, in modo che il selettore di immagine non chiamare i tuoi metodi delegato.

nel metodo imagePickerController:didFinishPickingImage:editingInfo: avete image2 definito come UIImageView. Non lo è, è un UIImage.

Si dovrebbe non-commento della linea image.delegate = self.

Si dovrebbe implementare il metodo imagePickerController:didFinishPickingMediaWithInfo: invece di imagePickerController:didFinishPickingImage:editingInfo:.

probabilmente inoltre necessario aggiungere UIImagePickerControllerDelegate al definitio n della tua classe di controller di visualizzazione, in modo che il compilatore sappia che il tuo controller di visualizzazione è conforme al protocollo UIImagePickerControllerDelegate.

+0

quando prendo il commento nella riga image.delegate = self, un errore che mostra, dicendo Impossibile assegnare un valore di tipo 'PostChoice' a un valore di tipo 'protocollo

+0

Ok, quindi è necessario aggiungere UIImagePickerControllerDelegate alla classe come: 'classe myVC: UIViewController, UIImagePickerControllerDelegate'. Questo dice al compilatore che la tua classe è conforme al protocollo 'UIImagePickerControllerDelegate'. –

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

Questo codice mi ha aiutato con rapida 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 questo codice si dispone di selezionare sia della macchina fotografica di opzione e 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) 
    }