ios - 在 AVPlayerViewController contentOverlayView 上添加的 UISlider 没有响应

标签 ios objective-c avplayer avplayerviewcontroller

我正在尝试添加一个 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;

 }

最佳答案

来自苹果文档:

Use the content overlay view to add additional custom views between the video content and the controls.

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

enter image description here

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

[avPlayerViewController.contentOverlayView addSubview:sliderForVolumeControl];

为此:

[avPlayerViewController.view addSubview:sliderForVolumeControl];

关于ios - 在 AVPlayerViewController contentOverlayView 上添加的 UISlider 没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34529065/

相关文章:

ios - 自定义 TableViewController 在 Swift 3 中播放声音和崩溃

ios - SwiftUI:是否可以使用 ForEach + ContextMenu + if 语句?

ios - 使用 RxSwift 和 Moya 处理重新认证

javascript - iOS网络应用程序 "failed to parse response"

objective-c - 带有索引 UITableViewController 和 UILocalizedIndexedCollat​​ion 的 NSFetchedResultsController

ios - 发送到已释放实例的消息 - 视为属性

ios - 如何检测 2 个 UIView 之间的碰撞

ios - 试图实现一个委托(delegate),当在导航栏中按下后退按钮时发出信号 - 我做错了什么?

iOS 8 - 如何在应用程序处于后台时让 LocalNotification 播放声音?

ios - 同步录音/回放ios