Есть ли способ, которым я могу выбрать только изображения "JPG", "PNG" и "JPEG" через UIImagePIcker - PullRequest
2 голосов
/ 04 февраля 2020

При использовании от self.imagePicker.mediaTypes = [(kUTTypeImage as String)] до UIImagePicker я могу выбрать все типы изображений, но мое требование - выбирать только изображения типа JPG, JPEG and PNG через библиотеку фотографий, а GIF и HEIC (живые фотографии) не допускаются .

Итак, есть ли способ предотвратить выбор фотографий типа GIF и HEI C при imagePicker.sourceType = .photoLibrary

коде? :

imagePicker.delegate = self

        let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)

        actionSheet.addAction(UIAlertAction(title: StringConstants.Actions.Camera, style: .default, handler: { (action:UIAlertAction) in
            CheckPermissions.checkPermission(permissionFor: .Camera,vc:self) { (success) in
                if success {
                    DispatchQueue.main.async {[unowned self] in
                        if(UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)) {
                            self.view.endEditing(true)
                            self.imagePicker.allowsEditing = false
                            self.imagePicker.sourceType = UIImagePickerControllerSourceType.camera
                            self.imagePicker.cameraCaptureMode = .photo
                            self.imagePicker.showsCameraControls = true
                            self.imagePicker.modalPresentationStyle = .overFullScreen
                            self.present(self.imagePicker, animated: true, completion: nil)
                        }
                        else {
                            self.showAlert(withTitle: kEmptyString, message: StringConstants.AlertMessage.cameraAlertMessage, andOkAction: nil )
                        }
                    }
                }
            }
        }))

        actionSheet.addAction(UIAlertAction(title: StringConstants.Actions.PhotoLibrary, style: .default, handler: { (action:UIAlertAction) in
            CheckPermissions.checkPermission(permissionFor: .PhotoLibrary,vc: self) { (success) in
                if success {
                    DispatchQueue.main.async {[unowned self] in
                        self.view.endEditing(true)
                        self.imagePicker.allowsEditing = false
                        self.imagePicker.sourceType = .photoLibrary
                        self.imagePicker.modalPresentationStyle = .overFullScreen
                        self.imagePicker.navigationBar.isTranslucent = false
                        self.imagePicker.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white]
                        self.present(self.imagePicker, animated: true, completion: nil)
                    }
                }
            }

        }))

Ответы [ 3 ]

1 голос
/ 04 февраля 2020

Вы должны указать идентификаторы только необходимых форматов.

Шаги, чтобы исправить это

  1. import MobileCoreServices

  2. Возьмите переменную ImagePickerController, скажем,

    let picker = UIImagePickerController()
    
  3. Укажите тип носителя следующим образом

    picker.mediaTypes = [(kUTTypePNG as String), (kUTTypeJPEG as String), (kUTTypeImage as String)] // This is an array - you can add other format Strings as well
    

Для перекрестной проверки вам потребуется обратите внимание, что видео / GIF-файлы не будут отображаться пользователю приложения, если они не указаны в качестве типа мультимедиа.

0 голосов
/ 04 февраля 2020

Вы можете указать выбранные типы мультимедиа в средстве выбора. Показать так:

picker.mediaTypes = [(kUTTypePNG as String)]
0 голосов
/ 04 февраля 2020

Вы пробовали вот так?

self.imagePicker.mediaTypes = [(kUTTypeGIF as String), 
                               (kUTTypeJPEG as String), 
                               (kUTTypePNG as String)]

И не забудьте импортировать MobileCoreServices framework.

...