3

以下のコードは、ビューに小さな 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);
        }
    }

ありがとう、リック

4

2 に答える 2

0

Xamarin と話をしたところ、AppDelegate の方向管理のオーバーライドを削除するよう提案されました。

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

このオーバーライドを削除した後、YouTube ビデオをロードするときにアプリケーションが期待どおりに動作しました。これで問題は解決しました。個々の ViewController オーバーライドを介して、また Info.plist ファイルを介してグローバルに、サポートされている向きを引き続き制御できます。

于 2013-08-29T19:32:09.500 に答える
0

https://github.com/nishanil/YouTubePlayeriOS このサンプルがお役に立てば幸いです。それは私にとってはうまくいきました。

于 2015-08-17T17:29:45.153 に答える