Выбранное изображение не изменит ранее отображенное изображение - PullRequest
0 голосов
/ 25 октября 2019

У меня есть простая настройка для выбора изображения из камеры или библиотеки фотографий. Когда я выбираю новую фотографию, она не отличается от исходной фотографии, с которой загружается приложение.

Я думаю, что это как-то связано с иерархией (не уверен, что я использую ее вправильные условия) кода. Я читаю свой код как выбранное изображение, затем устанавливаю переменную «originalImage» для выбранного изображения. Так что должно отображаться правильно? Ну, спойлер, я не прав.

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    var originalImage = UIImage(named: "crossSection2.jpg")!

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        imageView.image = originalImage
    }
    @IBAction func onCameraClicked(_ sender: Any) {
        let ac = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet)
        ac.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (action) in
            self.showPicker(sourceType: .camera)
        }))
        ac.addAction(UIAlertAction(title: "Library", style: .default, handler: { (action) in
            self.showPicker(sourceType: .photoLibrary)
            }))
        ac.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
        self.present(ac, animated: true, completion: nil)
    }

    func showPicker(sourceType: UIImagePickerController.SourceType) {
        let picker = UIImagePickerController()
        picker.delegate = self
        picker.sourceType = sourceType
        self.present(picker, animated: true, completion: nil) 
    }
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage newImage : UIImage, editingInfo: [String : AnyObject]?) {
        dismiss(animated: true, completion: nil)
        self.originalImage = newImage
        self.imageView.image = newImage
    }
}

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

С https://developer.apple.com/documentation/uikit/uiimagepickercontrollerdelegate/1619152-imagepickercontroller

устарело. Используйте imagePickerController: didFinishPickingMediaWithInfo: вместо этого.

, поэтому попробуйте изменить код на:

  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
         dismiss(animated: true, completion: nil)
        self.originalImage = info[.originalImage] as! UIImage
        self.imageView.image = (info[.originalImage] as! UIImage)
    }
0 голосов
/ 25 октября 2019

Вам необходимо обновить ваш UIImageView, а не только «originalImage». Попробуйте:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage newImage : UIImage, editingInfo: [String : AnyObject]?) {
    dismiss(animated: true, completion: nil)
    self.originalImage = newImage
    self.imageView.image = newImage
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...