Сначала создайте подкласс UIImagePickerController
и добавьте переменную completionHandler
с параметром типа UIImage?
class YourPicker: UIImagePickerController {
var completionHandler: ((UIImage?) -> ())?
}
, затем добавьте параметр в вашу функцию loadPhotoLibrary
, которая будет представлять UIImageView
, который вы хотитеизменить его image
.Также установите его обработчик завершения: вы хотите изменить image
определенного ImageView
func loadPhotoLibrary(setImageView imageView: UIImageView) {
let imagePicker = YourPicker() // don't forget to initialize subclass
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
imagePicker.allowsEditing = false
imagePicker.completionHandler = { image in
if let image = image { // if you just dismiss picker, you don't want to delete previous image
imageView.image = image
}
}
self.present(imagePicker, animated: true)
}
, теперь в методе делегата средства выбора downcast picker
, как YourPicker
и завершения вызова со значением для ключа UIImagePickerController.InfoKey
, приведенного кUIImage?
(если его значение nil
, не имеет значения, просто не устанавливается image
ImageView)
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let myPicker = picker as! YourPicker {
myPicker.completionHandler!(info[UIImagePickerController.InfoKey.originalImage] as? UIImage)
}
self.dismiss(animated: true, completion: nil)
}
, тогда просто в действиях кнопок вызовите ваш метод loadPhotoLibrary
как это
@IBAction func loadTopLeftImage(_ sender: Any) {
loadPhotoLibrary(setImageView: topLeftImage)
}
...