防止在UIImagePickerController中两次挑选相同的照片

时间:2017-05-24 09:10:51

标签: ios swift swift3 uiimagepickercontroller

如何防止用户在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)
}

感谢,

3 个答案:

答案 0 :(得分:3)

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

func imagePickerController(_ picker: UIImagePickerController,
                                  didFinishPickingMediaWithInfo info: [String : Any]) {
    picker.dismiss(animated: true) {
        if let pickedImage = (info[UIImagePickerControllerOriginalImage] as? UIImage) {
            // do stuff with the picked image
        }
    }
}

答案 1 :(得分:0)

好像你还没有将网址添加到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)
}

答案 2 :(得分:0)

迅捷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)
}