UIImageview不会在拍摄相机图像后更新,但是当选择了画廊图像时,相机图像会显示一秒钟

问题描述 投票:0回答:1

我在设置代表的图像视图中显示摄像机捕获的图像并被称为“ didFinishPickingMediaWithInfo”时遇到问题。

我有两个用于用户交互的按钮(相机图片和图库),一旦我从相机拍摄图片,然后从图库中选择其他任何图像,稍早显示的相机照片将显示一秒钟。我尝试了很多搜索,但到目前为止还没有运气。

谁能告诉我我想念的东西吗?以下是参考代码。

  @IBAction func cameraButtonPressed(_ sender: UIButton) {

    self.openCamera()
  }

  @IBAction func galleryButtonPressed(_ sender: UIButton) {

    self.openGallary()

  }


  override func viewDidLoad() {
    super.viewDidLoad()

    initialLayout()
  }

  override func viewWillAppear(_ animated: Bool) {

    self.lblPreview.isHidden = true
    self.imageTake.isHidden = true
    self.uploadButtonOutlet.isHidden = true
  }

  //
  //MARK: - Internal Methods
  func initialLayout() {

    self.cameraButtonOutlet.layer.cornerRadius = 20
    self.galleryButtonOutlet.layer.cornerRadius = 20
    self.uploadButtonOutlet.layer.cornerRadius = 20

  }


//MARK: - Open the camera
  func openCamera(){

    if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerController.SourceType.camera)){

      imagePicker.sourceType = UIImagePickerController.SourceType.camera
      //If you dont want to edit the photo then you can set allowsEditing to false
      imagePicker.allowsEditing = true
      imagePicker.delegate = self
      imagePicker.cameraCaptureMode = .photo
      imagePicker.cameraDevice = .rear
      self.present(imagePicker, animated: true, completion: nil)
    }
    else{
      let alert  = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert)
      alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
      self.present(alert, animated: true, completion: nil)
    }
  }

  //MARK: - Choose image from camera roll

  func openGallary(){

    imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
    imagePicker.allowsEditing = true
    imagePicker.delegate = self
    self.present(imagePicker, animated: true, completion: nil)
  }


extension UploadTimesheetViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {

  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info:  [UIImagePickerController.InfoKey : Any]) {

    if let editedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage{

      self.lblPreview.isHidden = false
      self.imageTake.isHidden = false
      self.uploadButtonOutlet.isHidden = false
      DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
        self.imageTake.image = editedImage
        self.imageTake.setNeedsLayout()
      })

      // self.imageTake.image = editedImage
    }

    //Dismiss the UIImagePicker after selection
    picker.dismiss(animated: true, completion: nil)
  }

  func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {

    picker.isNavigationBarHidden = false
    self.dismiss(animated: true, completion: nil)
  }
}

我也尝试了以下代码,但结果仍然相同。

var finalImage:UIImage?

if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
    finalImage = image
}else {
    finalImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
}

self.lblPreview.isHidden = false
self.imageTake.isHidden = false
self.uploadButtonOutlet.isHidden = false
self.imageTake.image = finalImage

//Dismiss the UIImagePicker after selection
picker.dismiss(animated: true, completion: nil)
ios uiimagepickercontroller swift5
1个回答
0
投票

您在1秒钟的延迟后在imageView上设置图像。这就是为什么上一张图像显示了第二个原因。

消除延迟并立即显示图像。像这样

if let editedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {

  self.lblPreview.isHidden = false
  self.imageTake.isHidden = false
  self.uploadButtonOutlet.isHidden = false
  self.imageTake.image = editedImage
  DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
    picker.dismiss(animated: true, completion: nil)
  })

})
© www.soinside.com 2019 - 2024. All rights reserved.