将视频播放器放在弹出窗口中时,我没有与视频播放器的交互
Posted
技术标签:
【中文标题】将视频播放器放在弹出窗口中时,我没有与视频播放器的交互【英文标题】:I don't have interactivity with the video player when I put it in a pop-up 【发布时间】:2016-06-20 08:48:55 【问题描述】:当我单击图片时,我会显示一个包含视频的弹出窗口。在该弹出窗口中,视频正在自动启动。问题是我没有与视频的交互性(播放、暂停等)。所以现在,我找到了使用 AVPlayerItemDidPlayToEndTimeNotification 循环它的方法,但我希望用户能够播放/暂停。 这是我的代码:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(itemDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:player];
NSURL *url = [NSURL fileURLWithPath:mediaPath];
player = [[AVPlayer alloc] initWithURL: url];
controller = [[AVPlayerViewController alloc] init];
controller.player = player;
controller.delegate = self;
controller.showsPlaybackControls = YES;
UIImageView *popView = [[[[[[NSBundle mainBundle] loadNibNamed:mediaType owner:self options:nil] objectAtIndex:0] viewLoadedFromXib] subviews] objectAtIndex:0];
[controller.view setFrame:CGRectMake(0, 0, 850, 600)];
[popView addSubview:controller.view];
[player play];
我准确地说,当我点击视频时,下面会出现带有暂停视频的栏,但是当我点击按钮时,什么也没有发生。
第一次编辑:似乎有一个 AVTouchIgnoringView 已由 AVPlayerViewController 自动添加。似乎有一个与 UserInteraction 的链接......但我尝试将其设置为 YES 但没有成功。可能我不是为了好看。有什么想法吗?
第二次编辑:这是添加 AVTouchIgnoringView 的 setFrame。那么您知道如何在不自动添加 AVTouchIgnoringView 的情况下更改框架的大小吗?
【问题讨论】:
您有什么理由不只是将 AVPlayerViewController 呈现为模态视图?我不建议这样展示它。在负责所有这一切的视图控制器上使用 presentViewController:animated: 方法。在这里查看关于展示视图控制器的部分developer.apple.com/library/ios/documentation/UIKit/Reference/… 由于演示文稿,我想将其显示为弹出窗口。我有一张地图,我想在弹出窗口中显示一个视频,地图在后面。客户希望地图始终显示在后面(在 ipad 上)。我不明白为什么它不起作用,因为当我点击视频两次时,有一点缩放,所以这意味着我有手,但我不能用下面的栏暂停视频。很奇怪…… 看看 UIPopoverPresentaionController,它将正确处理在 iPad 上将视图控制器呈现为弹出框,但在 iPhone 上全屏显示。网上资源很多,不用我在这里发帖。 我用漂亮的动画创建了一个漂亮的弹出框,所以我想使用它。感谢您的关注。如果有人有想法,我会等待。 我进步了。是 setFrame 产生了 AVTouchIgnoringView 和许多其他补充视图......我希望在几分钟内解决。 【参考方案1】:首先,我认为 UIImageView 是不正确的,因为你在里面放了一个视频,所以我建议你在 UIView 中改变。
UIView *popView = [[[[[[NSBundle mainBundle] loadNibNamed:mediaType owner:self options:nil] objectAtIndex:0] viewLoadedFromXib] subviews]
其次,我认为您可能会与视频进行用户互动。尝试更大的尺寸以显示带有控件的底部栏。
//视频调整大小
controller.view.frame = CGRectMake(0, 0, 900, 600);//for example
【讨论】:
这很神奇,很有效。我对 userInteractivity 如此着迷,这只是帧大小的问题! (你是正确的 imageView,我犯了一个错误)。谢谢。【参考方案2】:在我的例子中,AVPlayerViewController
视图上的触摸被忽略了,因为它的超级视图之一上有手势识别器。提到的识别器从方法返回NO
:canBePreventedByGestureRecognizer:
。
为 AVPlayerViewController
拥有的识别器添加例外修复了问题,并且 UI 再次可用。
【讨论】:
以上是关于将视频播放器放在弹出窗口中时,我没有与视频播放器的交互的主要内容,如果未能解决你的问题,请参考以下文章