【问题标题】:UISlider added on AVPlayerViewController contentOverlayView is not responding在 AVPlayerViewController contentOverlayView 上添加的 UISlider 没有响应
【发布时间】:2015-12-30 11:52:24
【问题描述】:

我正在尝试添加一个 UISlider 来控制 AVPlayerViewController 中的音量,为此我在“AVPlayerViewController.contentOverlayView”上添加了一个 UISlider。 UISlider 不允许我拖动,就好像它没有启用一样,并且它的选择器操作方法 'changeVolumeLevelOfPlayer' 没有被调用。

这是我的代码:

-(void)viewDidLoad {

 [super viewDidLoad];

 [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

 [[AVAudioSession sharedInstance] setActive:YES error:nil];

 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

 AVPlayerViewController *avPlayerViewController = [[AVPlayerViewController alloc] init];

 AVPlayer *player = [AVPlayer playerWithURL:[self getVideoURLAtIndex:[self.indexOfCurrentTrailer intValue]]];

 avPlayerViewController.player = player;

 avPlayerViewController.delegate = self;

 [player play];

 avPlayerViewController.view.frame = CGRectMake(0, 0, 300, 250);

 UISlider *sliderForVolumeControl = [[UISlider alloc] initWithFrame:CGRectMake(0, avPlayerViewController.view.frame.size.height/2, 100, 40)];

 [sliderForVolumeControl setMinimumValue:0.0];

 [sliderForVolumeControl setMaximumValue:1.0];

 [sliderForVolumeControl setValue:0.5];

 sliderForVolumeControl.continuous = YES;

 [sliderForVolumeControl setBackgroundColor:[UIColor orangeColor]];

 [sliderForVolumeControl addTarget:self action:@selector(changeVolumeLevelOfPlayer:) forControlEvents:UIControlEventValueChanged];

 [sliderForVolumeControl setUserInteractionEnabled:YES];

 [sliderForVolumeControl setEnabled:YES];

 [avPlayerViewController.contentOverlayView addSubview:sliderForVolumeControl];

 [self addChildViewController:avPlayerViewController];

 [self.view addSubview:avPlayerViewController.view];

 [avPlayerViewController didMoveToParentViewController:self];

 [player addObserver:self forKeyPath:@"status" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial) context:nil];

}

 -(void)changeVolumeLevelOfPlayer:(UISlider *)sender {

    player.volume = sender.value;

 }

【问题讨论】:

  • 您是否尝试将 gestureRecognizer 从 AVPlayerView 传递到叠加层中的滑块?
  • @zcui93 我尝试添加gestureRecognizer,但它不起作用。
  • 哪部分没用? AVPlayerView 没有收到?滑块不接收?滑块收到但没有响应?
  • 执行的点击动作直接传递给 AVPlayer 而不是滑块

标签: ios objective-c avplayer avplayerviewcontroller


【解决方案1】:

来自苹果文档:

使用内容覆盖视图添加其他自定义视图之间 视频内容和控件。

所以它看起来像这样:(在你的 UISlider 上有一堆其他层)

要使其正常工作,只需更改此行:

[avPlayerViewController.contentOverlayView addSubview:sliderForVolumeControl];

到这里:

[avPlayerViewController.view addSubview:sliderForVolumeControl];

【讨论】:

  • 将sliderForVolumeControl添加到avPlayerViewController.view后,当AVPlayer处于正常模式时我可以滑动,但是当我按下全屏按钮时,sliderForVolumeControl不可见。
  • @SurajMirajkar 这与您的原始问题不同。你可以查看这个答案:stackoverflow.com/a/27253503/1578927
猜你喜欢
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多