[英]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.