防止在 UIImagePickerController 中两次选择同一张照片

Ass*_*dai 6 uiimagepickercontroller ios swift swift3

如何防止用户在 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)
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

Yuc*_*ong 9

您还应该考虑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)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Joz*_*eRi 0

好像您还没有将 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)
}
Run Code Online (Sandbox Code Playgroud)