一个 UIImagePickerController 用于单个 VC 中的多个 UIImageView
one UIImagePickerController for multiple UIImageViews in a single VC
我正在使用单个 UIImagePickerController 在同一个 viewController 中选择 4 个图像
我不知道问这个问题很热,但如果你看看下面的图片,你可能会明白我的意思
例如:图片(1)用于个人资料照片,图片(2)用于身份证等
这是我得出的结果
when I chose the first image all the other images will show the same one so as the others.
class DriverAplication: UIViewController {
let driverPImg: UIImageView = {
let image = UIImageView(image: #imageLiteral(resourceName: "DriverPimg"))
image.layer.cornerRadius = 75
image.clipsToBounds = true
image.contentMode = .scaleAspectFill
image.isUserInteractionEnabled = true
image.translatesAutoresizingMaskIntoConstraints = false
return image
}()
let passImg: UIImageView = {
let image = UIImageView(image: #imageLiteral(resourceName: "passImg"))
image.layer.cornerRadius = 75
image.clipsToBounds = true
image.contentMode = .scaleAspectFill
image.isUserInteractionEnabled = true
image.translatesAutoresizingMaskIntoConstraints = false
return image
}()
var profileSelectedImg: UIImage?
var passSelectedImg: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(driverPImg)
view.addSubview(passImg)
let profileImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectProfileImage))
driverPImg.addGestureRecognizer(profileImgTapGestur)
let passImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectProfileImage))
passImg.addGestureRecognizer(passImgTapGestur)
}
@objc func selectProfileImage(){
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
let pickerController = UIImagePickerController()
pickerController.delegate = self
// PiActivityIndicator.startAnimating()
pickerController.allowsEditing = true
present(pickerController, animated: true, completion: nil)
}
}
extension DriverAplication: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let editedImg = info[.editedImage] as? UIImage {
profileSelectedImg = editedImg.withRenderingMode(.alwaysOriginal)
driverPImg.image = editedImg
} else if let originalImg = info[.originalImage] as? UIImage {
profileSelectedImg = originalImg.withRenderingMode(.alwaysOriginal)
driverPImg.image = originalImg
}
if let passEditedImg = info[.editedImage] as? UIImage {
passSelectedImg = passEditedImg.withRenderingMode(.alwaysOriginal)
passImg.image = passEditedImg
} else if let passOriginalImg = info[.originalImage] as? UIImage {
passSelectedImg = passOriginalImg.withRenderingMode(.alwaysOriginal)
passImg.image = passOriginalImg
}
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
// self.PiActivityIndicator.stopAnimating()
self.dismiss(animated: true, completion: nil)
}
}
您可以制作一个enum
来存储可能的选择器类型(个人资料或身份证照片)。
enum PictureSelectionType {
case profilePicture
case idPicture
}
class DriverAplication: UIViewController {
var pictureSelectionType = PictureSelectionType.profilePicture
/// inside ViewDidLoad...
let profileImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectProfileImage))
driverPImg.addGestureRecognizer(profileImgTapGestur)
let passImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectIDImage))
passImg.addGestureRecognizer(passImgTapGestur)
@objc func selectProfileImage() {
/// remember what the picker should return
pictureSelectionType = .profilePicture
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
let pickerController = UIImagePickerController()
pickerController.delegate = self
pickerController.allowsEditing = true
present(pickerController, animated: true, completion: nil)
}
@objc func selectIDImage() {
/// remember what the picker should return
pictureSelectionType = .idPicture
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
let pickerController = UIImagePickerController()
pickerController.delegate = self
pickerController.allowsEditing = true
present(pickerController, animated: true, completion: nil)
}
}
extension DriverAplication: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
var returnedImage: UIImage?
if let editedImg = info[.editedImage] as? UIImage {
returnedImage = editedImg
} else if let originalImg = info[.originalImage] as? UIImage {
returnedImage = originalImg
}
if let image = returnedImage { /// unwrap the image
/// read what the selection type is
if pictureSelectionType == .profilePicture {
driverPImg.image = image
} else { /// for ID picture
passImg.image = image
}
}
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
self.dismiss(animated: true, completion: nil)
}
}
我正在使用单个 UIImagePickerController 在同一个 viewController 中选择 4 个图像 我不知道问这个问题很热,但如果你看看下面的图片,你可能会明白我的意思
例如:图片(1)用于个人资料照片,图片(2)用于身份证等
这是我得出的结果 when I chose the first image all the other images will show the same one so as the others.
class DriverAplication: UIViewController {
let driverPImg: UIImageView = {
let image = UIImageView(image: #imageLiteral(resourceName: "DriverPimg"))
image.layer.cornerRadius = 75
image.clipsToBounds = true
image.contentMode = .scaleAspectFill
image.isUserInteractionEnabled = true
image.translatesAutoresizingMaskIntoConstraints = false
return image
}()
let passImg: UIImageView = {
let image = UIImageView(image: #imageLiteral(resourceName: "passImg"))
image.layer.cornerRadius = 75
image.clipsToBounds = true
image.contentMode = .scaleAspectFill
image.isUserInteractionEnabled = true
image.translatesAutoresizingMaskIntoConstraints = false
return image
}()
var profileSelectedImg: UIImage?
var passSelectedImg: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(driverPImg)
view.addSubview(passImg)
let profileImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectProfileImage))
driverPImg.addGestureRecognizer(profileImgTapGestur)
let passImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectProfileImage))
passImg.addGestureRecognizer(passImgTapGestur)
}
@objc func selectProfileImage(){
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
let pickerController = UIImagePickerController()
pickerController.delegate = self
// PiActivityIndicator.startAnimating()
pickerController.allowsEditing = true
present(pickerController, animated: true, completion: nil)
}
}
extension DriverAplication: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let editedImg = info[.editedImage] as? UIImage {
profileSelectedImg = editedImg.withRenderingMode(.alwaysOriginal)
driverPImg.image = editedImg
} else if let originalImg = info[.originalImage] as? UIImage {
profileSelectedImg = originalImg.withRenderingMode(.alwaysOriginal)
driverPImg.image = originalImg
}
if let passEditedImg = info[.editedImage] as? UIImage {
passSelectedImg = passEditedImg.withRenderingMode(.alwaysOriginal)
passImg.image = passEditedImg
} else if let passOriginalImg = info[.originalImage] as? UIImage {
passSelectedImg = passOriginalImg.withRenderingMode(.alwaysOriginal)
passImg.image = passOriginalImg
}
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
// self.PiActivityIndicator.stopAnimating()
self.dismiss(animated: true, completion: nil)
}
}
您可以制作一个enum
来存储可能的选择器类型(个人资料或身份证照片)。
enum PictureSelectionType {
case profilePicture
case idPicture
}
class DriverAplication: UIViewController {
var pictureSelectionType = PictureSelectionType.profilePicture
/// inside ViewDidLoad...
let profileImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectProfileImage))
driverPImg.addGestureRecognizer(profileImgTapGestur)
let passImgTapGestur = UITapGestureRecognizer(target: self, action: #selector(DriverAplication.selectIDImage))
passImg.addGestureRecognizer(passImgTapGestur)
@objc func selectProfileImage() {
/// remember what the picker should return
pictureSelectionType = .profilePicture
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
let pickerController = UIImagePickerController()
pickerController.delegate = self
pickerController.allowsEditing = true
present(pickerController, animated: true, completion: nil)
}
@objc func selectIDImage() {
/// remember what the picker should return
pictureSelectionType = .idPicture
let generator = UIImpactFeedbackGenerator(style: .light)
generator.impactOccurred()
let pickerController = UIImagePickerController()
pickerController.delegate = self
pickerController.allowsEditing = true
present(pickerController, animated: true, completion: nil)
}
}
extension DriverAplication: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
var returnedImage: UIImage?
if let editedImg = info[.editedImage] as? UIImage {
returnedImage = editedImg
} else if let originalImg = info[.originalImage] as? UIImage {
returnedImage = originalImg
}
if let image = returnedImage { /// unwrap the image
/// read what the selection type is
if pictureSelectionType == .profilePicture {
driverPImg.image = image
} else { /// for ID picture
passImg.image = image
}
}
dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
self.dismiss(animated: true, completion: nil)
}
}