[英]swift my UIImagePicker doesn't show any image on select image from photo library
大家我拿一个 imageView 并在上面设置一个图像,我想 select 如果用户在这里点击图像,我想从照片库中获取一个图像我的代码是
@IBOutlet weak var uploadImage: UIImageView!
var imagePicker = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
uploadImage.isUserInteractionEnabled = true
uploadImage.addGestureRecognizer(tapGestureRecognizer)
}
@objc func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)
{
print("image tapped")
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){
print("Button capture")
let imag = UIImagePickerController()
imag.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
imag.sourceType = UIImagePickerControllerSourceType.photoLibrary;
imag.allowsEditing = false
self.present(imag, animated: true, completion: nil)
}
}
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) {
let selectedImage : UIImage = image
uploadImage.image=selectedImage
self.dismiss(animated: true, completion: nil)
}
但它在 select 之后不显示图片,图片来自照片库,
它向我显示调试区域中的消息 -
[1098:24494] [发现] 发现扩展时遇到错误:错误域 = PlugInKit 代码 = 13“查询已取消”用户信息 = {NSLocalizedDescription = 查询取消}
您正在实施错误的didFinishPickingMediaWithInfo方法签名。
正确的签名应该是
func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
试试这样:
使您的 controller 符合 UIImagePickerControllerDelegate 和 UINavigationControllerDelegate 并像这样以编程方式声明您的 imaView:
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
let imageV: UIImageView = {
let iv = UIImageView()
iv.image = UIImage(named: "yourImageName")
iv.isUserInteractionEnabled = true
iv.clipsToBounds = true
iv.contentMode = .scaleAspectFit
iv.translatesAutoresizingMaskIntoConstraints = false
return iv
}()
现在在 viewDidLoad 中设置 imageView 点击手势和约束:
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .black
let gesture = UITapGestureRecognizer(target: self, action: #selector(handlePickImage))
imageV.addGestureRecognizer(gesture)
view.addSubview(imageV)
imageV.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
imageV.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imageV.heightAnchor.constraint(equalToConstant: 200).isActive = true
imageV.widthAnchor.constraint(equalToConstant: 200).isActive = true
}
在 handlePickImage function 中声明、设置和呈现您的 pickerController:
var imagePicker = UIImagePickerController()
@objc fileprivate func handlePickImage() {
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
imagePicker.view.tintColor = .white
imagePicker.modalPresentationStyle = .fullScreen
imagePicker.mediaTypes = ["public.image"]
imagePicker.allowsEditing = false
imagePicker.navigationBar.barTintColor = .darkGray
print("tapped....")
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
present(imagePicker, animated: true, completion: nil)
}
}
现在您可以处理选择的图像:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let imagePicked = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
imageV.image = imagePicked
print("Image picked height:", imagePicked.size.height, "Image picked width:", imagePicked.size.width)
}
picker.dismiss(animated: true) {
print("Picker Dismissed...")
}
}
如果用户点击取消按钮,请不要忘记设置
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
我遇到了同样的问题。 解决了。 问题是我忘了添加代表。
imagePicker.delegate = self
意识到:
[1098:24494] [发现] 发现扩展时遇到错误:错误域 = PlugInKit 代码 = 13“查询已取消”用户信息 = {NSLocalizedDescription = 查询取消}
只是一个警告。 此消息并不意味着问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.