【发布时间】:2020-08-11 02:26:35
【问题描述】:
我想在 AVPlayerViewController 中添加一个按钮,但我无法做到。我添加了一个按钮[AVPlayerViewController.contentOverlayView addSubview:_btnHandfree];,但是不能点击,这里是截图
也许有上层在那找不到。
【问题讨论】:
标签: ios objective-c swift iphone ios7
我想在 AVPlayerViewController 中添加一个按钮,但我无法做到。我添加了一个按钮[AVPlayerViewController.contentOverlayView addSubview:_btnHandfree];,但是不能点击,这里是截图
也许有上层在那找不到。
【问题讨论】:
标签: ios objective-c swift iphone ios7
试试这个。它可能会有所帮助。
#import "ViewController.h"
#import <AVKit/AVKit.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSURL *url=[[NSBundle mainBundle]URLForResource:@"videoplayback" withExtension:@"mov"];
AVPlayer *player = [AVPlayer playerWithURL:url];
AVPlayerViewController *playerViewController = [AVPlayerViewController new];
playerViewController.player = player;
UIButton *button = [[UIButton alloc] initWithFrame: CGRectMake(20, 100, 100, 50)];
[button addTarget:self
action:@selector(aMethod:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Button" forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor whiteColor]];
[self presentViewController:playerViewController animated:YES completion:^{
[playerViewController.player play];
}];
[self.player addSubview:playerViewController.view];
[self.view addSubview:button];
for(UIWindow* tempWindow in [[UIApplication sharedApplication]windows]){
for(UIView* tempView in [tempWindow subviews]){
if ([[tempView description] rangeOfString:@"UIInputSetContainerView"].location != NSNotFound){
[tempView addSubview:button];
break;
}
}
}
}
-(void)aMethod:(UIButton*)sender {
NSLog(@"test");
}
@end
【讨论】:
如 Apple 文档中所述。
在视频内容和播放控件之间显示的视图。
您可以调试视图层次结构以查看按钮在堆栈中的位置。
那如果直接添加到视图中呢?
[AVPlayerViewController.view addSubview:yourButton];
【讨论】:
如果您查看视图控制器的视图的子视图,您将看到它的单个视图称为AVPlayerViewControllerContentView。在制作视图控制器时,您可以这样做:
func showFullScreenVideo(using player: AVPlayer) {
// setup your player view controller
let playerViewController = AVPlayerViewController()
playerViewController.player = player
present(playerViewController, animated: true) { [weak self] in
self?.addShareButton(to: playerViewController)
}
}
private func addShareButton(to playerViewController: AVPlayerViewController) {
if let playerContentView = playerViewController.view.subviews.first {
let someView = SomeView()
playerContentView.addSubview(someView)
// use your own layout code:
someView.constrain(.centerX, .centerY, to: playerContentView)
}
}
在完成块内添加共享按钮可确保 playerViewController.view 已加载并可供使用。您可以尝试以多种方式强制加载视图。这是你的选择。另一种可能的方法是在添加分享按钮之前添加这行代码:
_ = playerViewController.view
而不是使用完成块。可能有效,也可能无效,但完成块方法肯定有效。
【讨论】: