AVPlayer UITapGestureRecognizer无法正常工作
我的AVPlayerViewController
有这个代码。
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAvPlayer)]; [self.avPlayerViewController.view addGestureRecognizer:tap];
但这不起作用..:S,我尝试过设置
[self.avPlayerViewController.view setUserInteractionEnabled:YES];
仍然没有好……
唯一shouldReceiveTouch
解决方案是使用UIGestureRecognizer
并实现它的shouldReceiveTouch
委托并检查是否触摸了av播放器..但问题是,我们不想捕获“tap release”事件..因为如果av player
视图只是触摸,它立即执行代码,这不是我们想要的…
请帮我们解决这个问题..
谢谢!
或者您可以inheritanceAVPlayerViewController并使用folowwing方法
得到控制权: –
1.touchBegan 2.touchEnd
确保将此标志设置为self.avPlayerContr.showsPlaybackControls = false
希望这对你有用。
AVPlayerViewController上手势处理的正确位置在控制器的contentOverlayView中 。
contentOverlayView是AVPlayerViewController的只读属性。 这是一个显示在video上但在控制器下的视图。 只是触摸处理的理想场所。 您可以在加载时向其添加子视图或手势处理程序。
以下代码以两种方式为您的video控制器提供触摸支持,以演示手势识别和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; } }
(此刻并不是真的想写一个Swift版本,对不起。:)
这应该做到这一点。 将识别器添加到播放器的子视图中:
[videoPlayerViewController.view.subviews[0] addGestureRecognizer:tap]
这是一个快速修复复杂的用户界面和手势,看看contentOverlayView看到TyR的答案
据我所知,你真正想要的是什么
UILongPressGestureRecognizer
因为,
UITapGestureRecognizer
如果您添加,则没有任何发布类型的事件
UILongPressGestureRecognizer
到你的
avPlayerViewController
然后在
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { if ( [gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] ) { } return YES; }
然后你可以设置手势的最小持续时间,以获得更好的感觉,
[holdGesture setMinimumPressDuration:0.01]
然后你可以实现这个方法,
- (void)holdAction:(UILongPressGestureRecognizer *)holdRecognizer
然后检查识别器的状态并执行所需的function
您可以在avplayerViewController
上添加transparent
视图,并可以在该视图上添加tapgesturerecognizer
。 希望这会有所帮助:)
简单的解决方案是在添加电影播放器后在同一电影持有人视图上添加手势视图。 无需将手势识别器直接添加到电影播放器。
[self.movieHolderView addSubview:self.moviePlayer.view]; [self.movieHolderView addSubview:self.gestureView]; [self.movieHolderView bringSubviewToFront:self.gestureView];
现在我们可以像这样在手势视图上添加我们的手势识别器
self.fullScreenTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHandler:)]; self.fullScreenTapGesture.numberOfTapsRequired = 1; [self.gestureView addGestureRecognizer:self.fullScreenTapGesture];