2014-11-06 6 views
2

мне нужно добавить пользовательскую кнопку в AVPlayerViewController, который будет отображаться в полноэкранном режиме, как и не-полноэкранном режиме для приложения, запущенного IOS 8.Пользовательская кнопка в AVPlayerViewController.ContentOverlayView

Добавление кнопки на AVPlayerViewController.view или содержащий просмотр будет работать не для полноэкранного просмотра, но когда плеер переключится на полноэкранный режим, кнопка больше не будет видна. Я обнаружил, что если я добавлю кнопку в AVPlayerViewController.ContentOverlayView, она появится в полноэкранном и не полноэкранном режимах, но тогда не будет видно, что ContentOverlayView отвечает на любые нажатия, поэтому кнопка не может быть нажата. Кто-нибудь знает о другом месте, чтобы добавить кнопку или способ заставить ContentOverlayView реагировать на касания?

Пример кода

AVPlayerViewController *playerView = [[AVPlayerViewController alloc] init]; 
playerView.player = [AVPlayer playerWithURL:movieURL]; 
CGRect viewInsetRect = CGRectInset ([self.view bounds], 
            kMovieViewOffsetX, 
            kMovieViewOffsetY); 
/* Inset the movie frame in the parent view frame. */ 
[[playerView view] setFrame:viewInsetRect]; 
[self.view addSubview: [playerView view]]; 

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.backgroundColor = [UIColor yellowColor]; 
btn.frame = CGRectMake(50, 50, 200, 75); 
[btn addTarget:self action:@selector(didSelectButton:) forControlEvents:UIControlEventTouchUpInside]; 
[btn setUserInteractionEnabled:YES]; 
[btn setEnabled:YES]; 

[playerView.contentOverlayView addSubview:btn]; 

ответ

0

Я была такая же затруднительное только сейчас.

Вместо:

[playerView.contentOverlayView addSubview:btn]; 

использования (после добавления playerView)

[self.view addSubview:btn]; 

Это добавит кнопку в свернутом плеере.

Теперь для полноэкранного режима я не нашел какой-либо другой надежный способ проверки, если игрок пошел на весь экран или назад, так вот аа решение:

self.windowChecker = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(checkIfFullscreen) userInfo:nil repeats:YES]; 

и это:

-(void)checkIfFullscreen{ 
    NSLog(@"videoBounds\n %f %f ", self.avVideoPlayer.contentOverlayView.frame.size.width,self.avVideoPlayer.contentOverlayView.frame.size.height); 

    if ([self playerIsFullscreen]) { // check the frame on this 
     for(UIWindow* tempWindow in [[UIApplication sharedApplication]windows]){ 
      for(UIView* tempView in [tempWindow subviews]){ 

       if ([[tempView description] rangeOfString:@"UIInputSetContainerView"].location != NSNotFound){ 
        UIButton *testB = [[UIButton alloc] initWithFrame: CGRectMake(20, 20, 400, 400)]; 
        testB.backgroundColor = [UIColor redColor]; 
        [testB addTarget:self action:@selector(buttonTouch) forControlEvents:UIControlEventTouchDown]; 
        [tempView addSubview:testB]; 

        break; 
       } 
      } 
     } 
    } 
} 

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

Cheers!

1

мне удалось получить эту работу, добавив следующее в мой AVPlayerViewController в IB:

  1. видом наложения с кнопкой внутри него
  2. Добавить ограничения в центр кнопки в виде наложения
  3. Создал IBOutlet для представления (я назвал его «overlay»)
  4. Создал действие с кнопки на AVPlayerViewController, которое печатает что-то, чтобы мы могли видеть, что нажатие кнопки работает
  5. перетащил вид наложения из иерархии представлений и на верхней панели контроллера представления (отображается в виде значка просмотра в верхней панели контроллера представления вместе со значком выхода и т.д.)

, а затем в коде для AVPlayerViewController:

override func viewDidLoad() { 
     super.viewDidLoad() 

     self.view.addSubview(self.overlay) 
    } 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     self.overlay.frame = self.view.bounds 
    } 

    @IBAction func playBtnTapped(sender: AnyObject) { 
     println("PlayBtnTapped") 
    } 

кнопка теперь сосредоточена в полноэкранном режиме/нормальный режим просмотра и кнопка работает

+1

Вот ссылка на простой пример проекта, демонстрирующего выше. https://github.com/toriaezunama/AVPlayerVCCustomButtonInOverlay – toriaezunama

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