2016-10-23 2 views
10

Я кодирую приложение, где использование может просматривать широкий спектр видео. Я открываю видео в полноэкранном режиме при нажатии кнопки, и пользователь может использовать элементы управления воспроизведением для изменения размера окна. Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь делится своим Интернетом через точку доступа, в верхней части приложения есть синий бар. При изменении размера окна в этот момент произойдет сбой в структуре AVKit (я считаю). Использование Swift 2.3, Xcode 7.3.1. Мой телефон, iPhone 6s, использует iOS 10, и я также пробовал его на iOS 9 iPhone 6 Plus, той же самой проблемой.Авария AVPlayer при изменении размера окна во время полноэкранного просмотра в режиме hotspotting

Катастрофа:

Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<AVFullScreenPlaybackControlsViewController: 0x102933000> should have parent view controller:<AVPlayerViewController: 0x10212d800> but actual parent is:<AVFullScreenViewController: 0x10884d900>' 

Мой код:

private let playerController = AVPlayerViewController() 
private var player: AVPlayer! 

private func playVideo(media: Media) { 

     player = AVPlayer(URL: NSURL(string: media.url)!) 
     playerController.player = player 

     presentViewController(playerController, animated: true, completion: { 
      self.playerController.player?.play() 
      self.playerController.delegate = self 
     }) 

    } 

Если я не разделяю мой интернет на моем телефоне (при этом не синий бар), то он работает отлично, никаких проблем вообще. Кому-то удалось скрыть эту синюю полосу или испытать подобную проблему?

+0

Я также видел эту аварию на производство приложении. Вы когда-нибудь находили решение? – FelipeOliveira

+1

@FelipeOliveira, к сожалению, нет. Я был вынужден жить с этим. Если вы когда-нибудь найдете решение, сообщите мне. :) – ClockWise

+1

Я нашел две радиолокационных деталей об этой аварии http://www.openradar.me/20488804 https://openradar.appspot.com/29919046 Поскольку авария происходит на частный вызов, там не так много Я могу сделать. Я сообщу, если найду решение. – FelipeOliveira

ответ

1

В качестве временного решения вы можете нажать на navigationControlelr стека или при представлении модально использовать этот один:

@interface AVPlayerViewController() 
- (void)fullScreenButtonTapped:(id)arg1; 
@end 

@interface RCKPlayerViewController() 

@end 

@implementation RCKPlayerViewController 

- (void)fullScreenButtonTapped:(id)arg1 { 
    if ([[UIApplication sharedApplication] statusBarFrame].size.height >= 40) { 
     // Show alert that cannot enter full screen when in-call 
    } else { 
     [super fullScreenButtonTapped:arg1]; 
    } 
} 

@end 

-

Тогда просто использовать RCKPlayerViewController

AVPlayerViewController *playerViewController = [[RCKPlayerViewController alloc] init]; 
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:videoStringURL]]; 
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; 
playerViewController.player = player; 

[self presentViewController:playerViewController animated:YES completion:^{ 
    [player play]; 
}]; 
3

Я установил его этот код:

@interface YourAVPlayerViewController : AVPlayerViewController 
@end 

@implementation YourAVPlayerViewController 

- (BOOL)prefersStatusBarHidden { 
     return YES; 
} 

@end 
0

Я написал небольшое расширение для AVPlayerViewController, что устраняет проблему приложения ширины:

// AVPlayerViewController.swift 

import AVKit 

extension AVPlayerViewController { 

    // fixes app crash while using personal hotspot + watching a full screen video 
    override open var prefersStatusBarHidden: Bool { 
    return true 
    } 

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