Gin*_*Dev 8 iphone objective-c ios uitapgesturerecognizer avplayerviewcontroller
我有这个代码AVPlayerViewController.
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAvPlayer)];
[self.avPlayerViewController.view addGestureRecognizer:tap];
Run Code Online (Sandbox Code Playgroud)
但这不起作用..:S,我尝试过设置
[self.avPlayerViewController.view setUserInteractionEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
仍然没有好......
唯一可行的解决方案是使用UIGestureRecognizer并实现它的shouldReceiveTouch委托并检查av播放器是否被触摸..但问题是,我们不想捕获"轻敲释放"事件..因为如果av player只是触摸了视图,它立即执行代码,这不是我们想要的......
请帮我们解决这个问题..
谢谢!
AVPlayerViewController上手势处理的正确位置在控制器的contentOverlayView中.
contentOverlayView是AVPlayerViewController的只读属性.这是一个显示在视频上但在控制器下的视图.只是触摸处理的理想场所.您可以在加载时向其添加子视图或手势处理程序.
以下代码以两种方式为您的视频控制器提供触摸支持,以演示手势识别和UIButton方法.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"mySegue"])
{
// Set things up when we're about to go the the video
AVPlayerViewController *avpvc = segue.destinationViewController;
AVPlayer *p = nil;
p = [AVPlayer playerWithURL:[NSURL URLWithString:@"https://my-video"]];
avpvc.player = p;
// Method 1: Add a gesture recognizer to the view
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];
avpvc.contentOverlayView.gestureRecognizers = @[tap];
// Method 2: Add a button to the view
UIButton *cov = [UIButton buttonWithType:UIButtonTypeCustom];
[cov addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];
cov.frame = self.view.bounds;
}
}
Run Code Online (Sandbox Code Playgroud)
(此刻并不是真的想写一个Swift版本,对不起.:)
这应该做到这一点.将识别器添加到播放器的子视图中:
[videoPlayerViewController.view.subviews[0] addGestureRecognizer:tap]
Run Code Online (Sandbox Code Playgroud)
这是一个快速修复复杂的用户界面和手势,看看contentOverlayView看到TyR的答案
小智 -1
或者您可以子类化 AVPlayerViewController 并使用以下方法来
获得控制权:-
1.触摸开始 2.触摸结束
确保设置此标志 self.avPlayerContr.showsPlaybackControls = false
希望这对你有用。