在仅限 iPhone 的应用程序中播放 YouTube 视频 - 失去控制

2024-03-08

下面的代码用于在视图上放置一个小的 WebView,以便用户可以点击它,视频会以全屏模式打开并播放。所有这些都有效,但游戏 4 秒后控件就会消失并且不会重新出现(点击、旋转......)。视频结束后,控件会重新出现,并且“完成”按钮变为可用。然而,一旦 WebView 被处理并加载了新视图,该新视图将在长达 6 分钟内无响应。

[Preserve (AllMembers=true)]
public class YouTubeViewer :  UIWebView
{
    public static AppDelegate appDelegate = (AppDelegate) UIApplication.SharedApplication.Delegate;

    public YouTubeViewer(string url, RectangleF frame)
    {
        Log.WriteLog("loading YouTubeView");
        appDelegate.firstViewing = true;
        this.UserInteractionEnabled = true;
        this.BackgroundColor = UIColor.Clear;
        this.Frame = frame;
        string youTubeVideoHTML = @"<object width=""{1}"" height=""{2}""><param name=""movie""
                            value=""{0}""></param><embed
                            src=""{0}"" type=""application/x-shockwave-flash"" 
                            width=""{1}"" height=""{2}""</embed></object>"; 

        string html = string.Format(youTubeVideoHTML, url, frame.Size.Width, frame.Size.Height);
        this.LoadHtmlString(html, null);

    }
}

以下是 WebView 的处理方式:

public void RemoveWebView(UIWebView inView)
    {
        try
        {
            Log.WriteLog("RemoveWebView");
            NSUrlCache.SharedCache.RemoveAllCachedResponses();
            NSUrlCache.SharedCache.DiskCapacity = 0;
            NSUrlCache.SharedCache.MemoryCapacity = 0;

            inView.LoadHtmlString("",null);
            inView.EvaluateJavascript("var body=document.getElementsByTagName('body')[0];body.style.backgroundColor=(body.style.backgroundColor=='')?'white':'';");
            inView.EvaluateJavascript("document.open();document.close()");
            inView.StopLoading();
            inView.Delegate = null;
            inView.RemoveFromSuperview();
            inView.Dispose();
        }
        catch(Exception ex)
        {
            Log.LogError("RemoveWebView",ex);
        }
    }

谢谢, 瑞克


我与 Xamarin 交谈,他们建议删除 AppDelegate 中方向管理的覆盖。

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations(UIApplication application, UIWindow forWindow)
    {  /*... code ...*/  }

删除此覆盖后,我的应用程序在加载 YouTube 视频时按预期工作。 这为我解决了这个问题。您仍然可以通过单独的 ViewController 覆盖以及通过 Info.plist 文件全局控制支持的方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在仅限 iPhone 的应用程序中播放 YouTube 视频 - 失去控制 的相关文章

随机推荐

  • 错误:Java 堆空间

    在 Ubuntu 中 当我运行 hadoop 示例时 bin hadoop jar hadoop examples 1 0 4 jar grep input output dfs a z echo HADOOP HEAPSIZE 2000
  • SwiftUI - 用于数组中索引的索引集

    我在 NavigationView 和列表中使用 ForEach 并结合用户使用 onDelete 删除行时调用的函数 如下所示 struct PeriodListView View ObservedObject var theperiod
  • NodeJS 需要函数

    当我检查节点的全局和模块时 我发现 require 不在其中 我不知道这是否神奇 但如果有人可以解释 require 是否是全局的 那么为什么它不在全局对象中也不在模块对象中 因为它在scope 当加载到文件中时 节点在幕后wraps ht
  • Html.Textbox VS Html.TextboxFor

    Html Textbox 和 Html TextboxFor 有什么区别 最终它们都生成相同的 HTML 但是Html TextBoxFor http msdn microsoft com en us library ee834950 as
  • pandas groupby:每组中前 3 个值并存储在 DataFrame 中

    这是后续pandas groupby 每组的前 3 个值 https stackoverflow com questions 47703606 pandas groupby top 3 values for each group 47703
  • 是否可以从 Java Servlet API 发送到相对路径的重定向?

    我想将相对重定向 到原始请求域和端口 发送到浏览器 像这样 Location app But Jetty自动发送完整的绝对路径 Location http 10 0 2 17 9080 app The 文档 http docs oracle
  • 可以在Rails中为belongs_to关联添加别名吗?

    我有一个模型belongs to协会 class Car lt ActiveRecord Base belongs to vendor end 所以我可以打电话car vendor 但我也想打电话car company 所以 我有以下内容
  • 如何编写将表达式绑定到名称的指令“ng-let”

    我想编写一个镜像 ng repeat 但将名称绑定到单个变量的指令 所以不要写这样的东西 ng repeat summary in data accounts all summaryAsArray 你可以写这样的东西 ng let summ
  • 使用表标签的嵌套重复器

    我正在使用以下代码尝试在 WinJS 中使用嵌套转发器 table class grid thead tr th class groupHeader th tr thead tbody tbody table
  • Unix Bash Shell 编程(如果目录存在)

    所以我试图进入 bash shell 脚本中的 if 语句 但我认为我做错了什么 无论如何 这是我的示例代码 bin bash read sd if d tmp sd then echo That directory exists else
  • LocalSystem vs. System vs. Local System Windows 系统帐户 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对 Windows 内置帐户的 MS 文档感到完全困惑 SQL Server 2008 R2 在线文档 设置 Windows 服务帐户
  • Selenium:如何获取html页面代码的影子根中的元素?

    我需要获取按钮的元素 以使用 selenium 将 MetaMask 钱包连接到多边形网桥 the button I need to find But the button as I understand it is hidden in s
  • 如何强制NetStream创建关键帧?

    我创建了一个视频流录制应用程序 除了录制的 FLV 有点损坏之外 该应用程序运行良好 如果我在 VLC 播放器中打开 FLV 一切都是绿色的 但当发生更改时会变得 干净 尤其是在视频的开头是分手 我用的是Red5 1 0 对于预先录制的流
  • RDS实例CPU利用率

    我的 amazon mysql 大型 RDS 实例的 CPU 利用率非常高 大约 70 没有任何真正的原因 如何找到哪个查询或进程正在损害我的实例 thanks 标准方法是检查SHOW PROCESSLIST or SHOW ENGINE
  • Google Drive API,上传文件 [Python]

    我使用 API 将备份从服务器上传到我的谷歌驱动器 授权顺利通过 文件已上传 但文件未出现在列表中 代码 import httplib2 import pprint from apiclient discovery import build
  • AttributeError:“识别器”对象没有属性“识别”

    我正在尝试 Python 中的语音识别模块 版本 3 5 并收到以下错误 AttributeError 识别器 对象没有属性 识别 这是我使用的代码 import pyaudio import speech recognition as s
  • 使用 RMySQL 的 UTF8 编码

    我正在尝试从 mysql 数据库查询数据 当然 其中包含一些字符串 对于连接和数据检索 我在 R 中使用 RMySQL 效果很好 除了一件事 我正在检索的字符串似乎不是 utf8 格式的 但我需要这个 因为这些字符串中有一些德语 Umlau
  • Python:检查两个列表之间字符串的部分匹配

    我有两个列表 如下所示 c John query 989877 forcast Tamm isl My name is Anne Query 989877 John Tamm Ju 我想检查其中的每一项isl中的每一项c这样我就可以得到所有
  • Android 上的 RTSP 客户端实现

    我看到很多与此相关的问题 尽管如此 我认为我的答案还没有 我想在 Android 上使用已编码的 RTSP 客户端与 MediaCodec 一起使用 以便捕获 H264 中的 RTSP 流 然后解码并显示它 我使用了 VideoView 和
  • 在仅限 iPhone 的应用程序中播放 YouTube 视频 - 失去控制

    下面的代码用于在视图上放置一个小的 WebView 以便用户可以点击它 视频会以全屏模式打开并播放 所有这些都有效 但游戏 4 秒后控件就会消失并且不会重新出现 点击 旋转 视频结束后 控件会重新出现 并且 完成 按钮变为可用 然而 一旦