2014-12-30 2 views
3

Я пишу приложение, в котором пользователь может выбирать фотографии и видео из библиотеки. Я хочу реализовать свой собственный видеопроигрыватель, когда выбрано видео, но приложение сразу же запускает проигрыватель по умолчанию, который имеет кнопку выбора.uiimagepickercontroller didfinishpickingmediawithinfo NOT CALLED при выборе видео из библиотеки

Функция didfinishpickingmediawithinfo не вызывается. Это происходит только при выборе видео. Я могу отобразить выбранную фотографию на экран, потому что метод делегата вызывается в случае выбора фотографии.

Почему метод делегата не выбирается, только когда видео выбрано из библиотеки?

Код для библиотеки нажатия кнопки:

//Library access function displays photos and videos stored on the device 
- (IBAction)selectPhoto:(UIButton *)sender { 

UIImagePickerController *picker2 = [[UIImagePickerController alloc] init]; 
picker2.delegate = self; 
picker2.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
picker2.mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:picker2.sourceType]; 
picker2.allowsEditing = NO; 

self.picker2 = picker2; 

[self.picker dismissViewControllerAnimated:YES completion:^{ 
    [self presentViewController:self.picker2 animated:YES completion:NULL];}]; 
} 

я включать делегат в контроллере представления. Множество вопросов, которые я исследовал, указывают на отсутствие включения в заголовок контроллера представления, но я заверяю вас, что они там.

Вот код для включения:

@interface ViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIGestureRecognizerDelegate> 

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

Если у кого-то была эта проблема раньше и придумали решение, пожалуйста, поделитесь ею. Я искал много дней и не нашел решения этой проблемы.

У человека в этом thread была та же проблема, но проблема так и не была решена.

Все это question может предложить как решение, которое я внедрил в свою программу.

Я добавил следующий код в соответствии с запросом.

Метод делегата:

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

    NSLog(@"didfinishpicking method triggered"); 
    // Get the type of media selected 
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 

    // Handling Media Capturing (Images/Videos) 
    // When an image is taken 
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage] && picker.sourceType == UIImagePickerControllerSourceTypeCamera) { 

     // Save the taken photo to the camera roll library 
     UIImage *imageTaken = [info valueForKey:UIImagePickerControllerOriginalImage]; 
     UIImageWriteToSavedPhotosAlbum(imageTaken, nil, nil, nil); 

     // Update the library button image 
     [self.imageButton setImage:imageTaken forState:UIControlStateNormal]; 

    } 

    // When a video is taken 
    else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie] && picker.sourceType == UIImagePickerControllerSourceTypeCamera) { 

     // Grab the URL for the video just taken 
     NSURL *newVideo = [info objectForKey:UIImagePickerControllerMediaURL]; 

     // Save the video to the camera roll 
     UISaveVideoAtPathToSavedPhotosAlbum([newVideo path], nil, nil, nil); 


    } 

    // Handling Library Previewing 
    // When an image is selected 
    else if ([mediaType isEqualToString:(NSString *)kUTTypeImage] && picker.sourceType != UIImagePickerControllerSourceTypeCamera) { 

     NSLog(@"A picture was selected from the library."); 

     UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; 
     self.libraryImage.image = image; 

     self.libraryView.translatesAutoresizingMaskIntoConstraints = YES; 

     [[UIApplication sharedApplication].keyWindow addSubview: self.libraryView]; 

    } 

    // When a video is selected 
    else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie] && picker.sourceType != UIImagePickerControllerSourceTypeCamera) { 
     NSLog(@"A video was selected from the library."); 
    } 
} 

Даже с задержкой времени, как было предложено picker2 еще сломана. Я использовал следующее answer для задержки вызова.

Это был результат, когда я сначала попытался выбрать видео, а затем выбрать фотографию. Это было выполнено с увольнением, а затем задержка перед представлением второго сборщика.

> 2014-12-30 00:11:57.763 Sneak[228:907] [MPAVController] Autoplay: 
> Enabling autoplay 2014-12-30 00:11:57.766 Sneak[228:907] 
> [MPAVController] Autoplay: Skipping autoplay, disabled (for current 
> item: 0, on player: 1) 2014-12-30 00:11:57.853 Sneak[228:907] 
> [MPAVController] Autoplay: Enabling autoplay 2014-12-30 00:11:58.052 
> Sneak[228:907] [MPCloudAssetDownloadController] Prioritization 
> requested for media item ID: 0 2014-12-30 00:11:58.897 Sneak[228:907] 
> [MPAVController] Autoplay: Skipping autoplay, disabled (for current 
> item: 0, on player: 1) 2014-12-30 00:11:58.911 Sneak[228:907] 
> [MPAVController] Autoplay: _streamLikelyToKeepUp: 0 -> 1 2014-12-30 
> 00:12:17.576 Sneak[228:907] didfinishpicking method triggered 
> 2014-12-30 00:12:17.579 Sneak[228:907] A picture was selected from the 
> library. 

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

Я до сих пор не знаю, как вызвать метод делегата непосредственно при выборе видео из библиотеки и обходить видеопроигрыватель по умолчанию. Предоставляет ли эта дополнительная информация какие-либо другие идеи?

+0

Я не верю, что вы говорите. Докажите это мне. Пожалуйста, опубликуйте свою фактическую реализацию 'didFinishPicking ...', включая ваше доказательство того, что оно «не называется». – matt

+0

Я добавил код к вопросу. – mattk

+0

Я тестирую iPhone 3GS с iOS 6.0.1. Может ли это быть чем-то связано с этим? – mattk

ответ

0

Перед тем как представить picker2 установить свойство picker2.allowsEditing=NO

Позвольте мне знать, если он работает для вас или нет.

+0

Если вы посмотрите на код, указанный в вопросе, вы увидите, что я это сделал. Это не работает. – mattk

Смежные вопросы