Пользовательская кнопка не работает в AVPlayer iOS 11, но отлично работает ниже iOS 11?

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

Вот мой код, который работает ниже iOS 11:

AVPlayer *player = [AVPlayer playerWithURL:videoURL];

// create a player view controller
avcontroller = [[AVPlayerViewController alloc]init];
avcontroller.player = player;
[player play];


NSNotificationCenter *noteCenter = [NSNotificationCenter defaultCenter];
[noteCenter addObserverForName:AVPlayerItemDidPlayToEndTimeNotification
                        object:nil
                         queue:nil
                    usingBlock:^(NSNotification *note) {

                        NSLog(@"Video end");
                        self.avcontroller.player = nil;
                        [self.avcontroller.view removeFromSuperview];
                        [self.view addSubview:delegate.tabViewControllerObj.tabBarController.view];
                    }];

_skip =[UIButton buttonWithType:UIButtonTypeCustom];
[_skip addTarget:self action:@selector(btnSkipTapped)
 forControlEvents:UIControlEventTouchUpInside];
[_skip setTitle:@"Skip" forState:UIControlStateNormal];
_skip.layer.borderWidth = 2.0f;
_skip.layer.cornerRadius = 12; 
_skip.clipsToBounds = YES;
_skip.layer.borderColor = [UIColor whiteColor].CGColor;

// show the view controller
[self addChildViewController:avcontroller];
[avcontroller.view addSubview:_skip];
[avcontroller.view bringSubviewToFront:_skip];
[self.view addSubview:avcontroller.view];
avcontroller.view.frame = self.view.frame;

}

-(void)viewDidLayoutSubviews{
  [super viewDidLayoutSubviews];

 _skip.frame = CGRectMake((self.view.frame.size.width-140),(self.view.frame.size.height-150),100.0,35.0);
}

А вот функция нажатия кнопки:

- (IBAction)btnSkipTapped{

NSLog(@"Skip button clicked");
self.avcontroller.player = nil;
[self.avcontroller.view removeFromSuperview];
[self.view addSubview:delegate.tabViewControllerObj.tabBarController.view];
}

Этот код будет отображать кнопку идеально, но при нажатии кнопки он не вызывает функцию btnSkipTapped. Любая помощь будет оценена!


person Deep Shah    schedule 22.10.2017    source источник


Ответы (1)


@DeepShah, вы добавили кнопку пропуска в avcontroller.view, чтобы она отображалась правильно, но вы не можете нажать на нее, потому что AVPlayerViewControllerContentView закрывает эту кнопку пропуска.

см. изображение ниже:

изображение

поэтому вам нужно добавить кнопку пропуска в self.view и она работает.

[self.view addSubview:_skip];
[self.view bringSubviewToFront:_skip];
person iNiravKotecha    schedule 28.10.2017
comment
Я сталкиваюсь с той же проблемой. В моем случае я представляю AVPlayerViewController и добавляю пользовательскую кнопку. Кнопка отображается на AVPlayerViewController, но не может вызвать действие кнопки. Я пытался сделать то, что вы упомянули выше, но не сработало. Эта проблема возникла только в iOS 11. let btn = UIButton(type: .custom) as UIButton self.playerViewController.view?.addSubview(btn) self.playerViewController.view?.bringSubview(toFront: self.castWrapperView) self.present(self.playerViewController , анимация: ложь, завершение: ноль) @Nirav есть идеи по этому поводу? - person Pramuka Dias; 07.11.2017
comment
добавлено в self.view или self.playerViewController.view ? - person iNiravKotecha; 07.11.2017
comment
попробуйте добавить self.view - person iNiravKotecha; 07.11.2017
comment
self.view?.addSubview(кнопка) self.view?.bringSubview(toFront: btn) Теперь кнопка не отображается на экране игрока - person Pramuka Dias; 07.11.2017
comment
можешь дать мне код? так что я могу проверить это. в дропбоксе или где угодно код ссылки. если можно то - person iNiravKotecha; 07.11.2017
comment
@Nirav Kotecha, я нашел решение. Я добавлю его в качестве ответа на этот вопрос. Спасибо за ваше время и внимание. - person Pramuka Dias; 08.11.2017
comment
@PramukaD у меня есть решение. вам нужно добавить кнопку в UIApplication.shared.keyWindow?.addSubview(btn) и удалить ниже 2 строки self.aPlayerViewController.view.addSubview(btn) self.aPlayerViewController.view.bringSubview(toFront: btn) - person iNiravKotecha; 08.11.2017
comment
Я сделал то, что вы упомянули в комментарии выше. Теперь действие кнопки может быть запущено, но при отклонении кнопка отображается в предыдущем представлении. В любом случае я могу с этим справиться. Спасибо. - person Pramuka Dias; 08.11.2017