将视频播放器放在弹出窗口中时,我没有与视频播放器的交互

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 视图上的触摸被忽略了,因为它的超级视图之一上有手势识别器。提到的识别器从方法返回NOcanBePreventedByGestureRecognizer:

AVPlayerViewController 拥有的识别器添加例外修复了问题,并且 UI 再次可用。

【讨论】:

以上是关于将视频播放器放在弹出窗口中时,我没有与视频播放器的交互的主要内容,如果未能解决你的问题,请参考以下文章

单击html中的按钮时如何将视频播放为弹出窗口

如何弹出一个 jquery 窗口来播放 youtube 视频?

关闭弹出窗口后,弹出视频会在后台继续播放

重复的 YouTube iframe 嵌入视频播放

即使关闭后如何停止弹出视频的视频播放背景

potplayer如何实现两个视频同时在一个窗口播放