【问题标题】:prevent picking the same photo twice in UIImagePickerController防止在 UIImagePickerController 中两次选择同一张照片
【发布时间】:2017-10-24 12:51:47
【问题描述】:

如何防止用户在 UIImagePickerContoroller 中两次选择相同的图像以避免重复?

我尝试使用 URLReference 执行此操作,但它不起作用,所以我猜它不是这样。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if let url = info[UIImagePickerControllerReferenceURL] as? NSURL{
        if photosURL.contains(url){
             Utilities.showMessage(message: "photo Uploaded already", sender: self, title: ErrorTitle.FRIENDS, onDismissAction: nil)
        } else {
            if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
                photos.append(pickedImage)
            }
        }
    }
    dismiss(animated: true, completion: nil)
}

谢谢,

【问题讨论】:

  • 为 imagePicker 添加你完成的代码。
  • info[UIImagePickerControllerReferenceURL] 对于每张图片都应该是唯一的,因此您可以保留它以检查它是否已被选中
  • 已经尝试过了,当我检查 photosURL.contains(url) 是否返回 false 时

标签: ios swift swift3 uiimagepickercontroller


【解决方案1】:

您还应该考虑先执行picker.dismiss,然后对图像执行其他逻辑。这样,您可以防止用户多次点击图像并多次调用委托函数。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    guard !picker.isBeingDismissed else {
        return
    }
    picker.dismiss(animated: true) {
        if let pickedImage = (info[UIImagePickerController.InfoKey(rawValue: UIImagePickerController.InfoKey.originalImage.rawValue)] as? UIImage) {
            // do stuff with the picked image
            print("Uesr picked an image \(pickedImage)")
        }
    }
}

【讨论】:

  • 如果用户多次快速点击垃圾图像,无论如何它都会多次调用委托函数。
  • @Mikael 我还没有测试过这个。但如果这是一个问题,也许我们可以在beingDismissed 上再添加一个检查。
  • @YuchenZhong 你能补充一下关于我们可以在哪里添加关于被解雇的检查的答案吗?
  • @MiteshDobareeya 我更新了上面的答案以包括对isBeingDismissed 的检查,并将代码更新为最新版本的 Swift(即 Swift 5.2)。
【解决方案2】:

斯威夫特 4

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    let info = convertFromUIImagePickerControllerInfoKeyDictionary(info)

    if let capturedImage = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)] as? UIImage {
        // do stuff
    }

    picker.delegate = nil
    picker.dismiss(animated: true, completion: nil)
}

【讨论】:

  • 什么是convertFromUIImagePickerControllerInfoKeyDictionary(info) 请澄清一下。
  • 面临同样的问题并将委托设置为 nil 修复了它。非常感谢,伙计!
【解决方案3】:

您似乎没有将 url 附加到 photosURL 中? 试试这个:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

if let url = info[UIImagePickerControllerReferenceURL] as? NSURL{
    if photosURL.contains(url){
         Utilities.showMessage(message: "photo Uploaded already", sender: self, title: ErrorTitle.FRIENDS, onDismissAction: nil)
    } else {
        photosURL.append(url)
        if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
            photos.append(pickedImage)
        }
    }
}
dismiss(animated: true, completion: nil)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    相关资源
    最近更新 更多