2015-05-19 2 views
9

Проблема, стоящая перед лицом, помещает изображение, которое я выбираю из галереи, в UIImageView (imageChosen).Настройка изображения, взятого из галереи, в UIImageView

код прекрасно работает без каких-либо ошибок, но картина я выбрал не установлен на «imageChosen»

вот мой код

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 не работал, я добавляя imageChosen внутри одной и той же точки зрения, self.view –

+0

@adnan хорошо, я проверка Теперь –

+0

@adnan я увидел этот код здесь http://www.theappguruz.com/ blog/user -action-camera-using-uiimagepickercontroller-swift /, все, что я хочу, чтобы оно помещало картинку в изображениеView, без создания кнопок, спасибо –

ответ

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

использовать imageChosen вместо myImageView.Просто проверьте логику, имена переменных не имеют значения. –

+0

спасибо большое, теперь ее работа –

+0

вы знаете, как я могу перейти на другой вид, после того как я выбрал изображение из галереи, я имею в виду, есть ли способ сделать это, возможно внутри segue или по-разному функция –

2

Несколько проблем.

Если вы посмотрите на документы, метод imagePickerController:didFinishPickingImage:editingInfo: устарел в iOS 3.0.

Это справедливая ставка, что ее даже не называют. (У вас есть линия, которая устанавливает ваш контроллер представления в качестве делегата закомментированного, поэтому выбор изображения не будет вызывать методы делегата.

В вашем методе imagePickerController:didFinishPickingImage:editingInfo: вы имеете IMAGE2 определяются как UIImageView. Это не так, это UIImage.

Вы должны не-закомментировать строку image.delegate = self.

Вы должны реализовать метод imagePickerController:didFinishPickingMediaWithInfo: вместо imagePickerController:didFinishPickingImage:editingInfo:.

Вы, вероятно, также необходимо добавить UIImagePickerControllerDelegate к Definitio n вашего класса контроллера вида, поэтому компилятор знает, что ваш контроллер просмотра соответствует протоколу UIImagePickerControllerDelegate.

+0

, когда я вычеркиваю комментарий в строке image.delegate = self, показывает ошибку, говоря, что не могу присвоить значение типа «PostChoice» для значения типа «протокол»

+0

Хорошо, тогда вам нужно добавить UIImagePickerControllerDelegate в свой класс, например: 'class myVC: UIViewController, UIImagePickerControllerDelegate'. Это говорит компилятору, что ваш класс соответствует протоколу '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

Этот код помог мне с быстрым 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

В Swift 3.0 в этом коде вы должны выбрать как вариант камеры и 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) 
    } 
Смежные вопросы