WedX - журнал о программировании и компьютерных науках

Как определить, выбирает ли пользователь изображение или видео из библиотеки при использовании UIImagePickerController в iOS?

Я использую UIImagePickerController в своем приложении ios, чтобы дать пользователю возможность выбрать фотографию или видео из библиотеки фотографий. Я ограничиваю видео до 1 минуты. Вот мой код:

В действии кнопки:

- (void)getPictureOrVideoFromLibrary {

    CFStringRef mTypes[2] = { kUTTypeImage, kUTTypeMovie };
    CFArrayRef mTypesArray = CFArrayCreate(CFAllocatorGetDefault(), (const void**)mTypes, 2, &kCFTypeArrayCallBacks);
    imagePickerController.mediaTypes = (__bridge NSArray*)mTypesArray;
    CFRelease(mTypesArray);

    imagePickerController.videoMaximumDuration = 60.0f;
    imagePickerController.allowsEditing = YES;

    imagePickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

Я хочу показывать как изображения, так и видео в фотобиблиотеке, поэтому я использовал и kUTTypeImage, и kUTTypeMovie. Здесь я устанавливаю videoMaximumDuration на 60.0f и allowsEditing на YES, потому что я хочу ограничить длину видео до 1 минуты.

Проблема, с которой я столкнулся.

Средство выбора выглядит следующим образом (с видео и изображениями) [screenshot1]:

введите описание изображения здесь

когда пользователь выбирает видео, оно отображается следующим образом (работает как положено):

введите описание изображения здесь

Когда пользователь выбирает картинку, она выглядит так [screenshot2]:

введите описание изображения здесь

Я не хочу показывать здесь прямоугольную рамку обрезки.

После того, как пользователь нажмет «Выбрать», я смогу определить, фото это или видео, в методе делегата didFinishPickingMediaWithInfo.

Но я хочу знать, фото это или видео со скриншота 1 до скриншота 2. так что я могу установить allowsediting в NO, чтобы избавиться от этого прямоугольника.

Является ли это возможным?

Я не хочу отображать обе опции как «Выбрать фото из библиотеки», «Выбрать видео из библиотеки». Я просто хочу показать только один вариант - «Выбрать фото или видео из библиотеки».

Есть ли способ определить, выбирает ли пользователь изображение или видео, или можно избавиться от этого прямоугольного поля?

Возможно ли этого добиться?

Мне нужны ваши ценные предложения. Пожалуйста помогите. Заранее спасибо.


  • вы добавили методы делегата? 01.12.2014
  • вы используете одну кнопку для фото и библиотеки или есть две кнопки: одна для выбора фотографии, другая для выбора видео? 01.12.2014
  • @sheshnath. У меня есть только одна кнопка, которая загружает изображения и видео из библиотеки .. 01.12.2014
  • Да @ V-Xtreme .. я добавил. 01.12.2014
  • @AshokKumarS: вы можете видеть и изображение, и видео в режиме выбора? 01.12.2014
  • Да, я вижу и то, и другое. @ V-Xtreme 01.12.2014
  • @AshokKumarS: не могу сказать, не попробовав код, но можете ли вы попробовать распечатать все ключи информационного словаря. Также не знаю, как вы загружаете видео / изображение из каталога информации 01.12.2014
  • глядя на документы, кажется, что вы получили видео с помощью ключа UIImagePickerControllerMediaURL и изображения с помощью ключа UIImagePickerControllerOriginalImage 01.12.2014
  • Спасибо. @ V-Xtreme .. Я думаю, вы не понимаете мою проблему или мой вопрос был неясным .. Я обновил его. пожалуйста, проверьте это один раз. 01.12.2014
  • @AshokKumarS, что это за библиотека? 19.01.2018
  • @ EICaptainv2.0 Это UIImagePickerController от Apple из фреймворка UIKit: developer.apple.com/documentation/uikit/controluiimagepicker 19.01.2018
  • @AshokKumarS, что первый диапазон? 19.01.2018
  • @ EICaptainv2.0 Только из того же фреймворка Apple. Ползунок диапазона позволяет пользователю обрезать более длинные видео, поскольку мы указали videoMaximumDuration как «60». 20.01.2018

Ответы:


1

проверьте это в методе делегата

   - (void)imagePickerController:(UIImagePickerController *)pickerImage didFinishPickingMediaWithInfo:(NSDictionary *)info
{

  // UIImagePickerControllerMediaType
 if(info[UIImagePickerControllerMediaType]==kUTTypeImage)
 {
    //image
 }
 else
 {
    //video
 }
}

1) добавить MobileCoreServices.framework

2) импортируйте ниже заголовочный файл. MobileCoreServices / MobileCoreServices.h

01.12.2014
  • Спасибо @shesh nath .. Я знаю этот метод .. Я думаю, вы не понимаете мою проблему или мой вопрос был неясным .. Я обновил его. пожалуйста, проверьте это один раз. 01.12.2014

  • 2

    Просто небольшое изменение в ответе @shesh nath. Я просто конвертирую kUTTypeImage в NSString, чтобы устранить это предупреждение:

    Сравнение различных типов указателей ('id _Nullable' и 'CFStringRef' (также известного как 'const struct __CFString *'))

    - (void)imagePickerController:(UIImagePickerController*)imagePicker didFinishPickingMediaWithInfo:(NSDictionary*)info {
    
        if([info[UIImagePickerControllerMediaType] isEqualToString:(__bridge NSString *)(kUTTypeImage)])
        {
            NSLog(@"Image");
            //image
        }
        else
        {
            NSLog(@"Video");
            //video
        }
    }  
    

    И не забудьте добавить фреймворк MobileCoreServices.

    06.09.2016
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]