【问题标题】:Xamarin.Forms Set video as splash screenXamarin.Forms 将视频设置为启动画面
【发布时间】:2019-06-18 12:51:11
【问题描述】:

我正在处理xamarin.forms 共享项目。我在将视频设置为启动画面时遇到问题。我从here 得到了参考。

我面临的问题是视频播放器已初始化并执行其过程,此时,AppDelegate 代码首先返回。所以视频没有显示,但它的声音来了。有什么我想念的吗?

在这里我合并了样本的VideoControllerVideoViewController。我只使用 VideoViewController 并在 SetMoviePlayer() 函数中的 Resources 文件夹中引用我的视频

我试过的代码:

AppDelegate.cs

[Register("AppDelegate")]
public partial class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    public override UIWindow Window { get; set; }
    VideoViewController control = new VideoViewController();

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            try
            {
                Window = new UIWindow(UIScreen.MainScreen.Bounds);

                Window.RootViewController = control;

                //global::Xamarin.Forms.Forms.Init();
                //LoadApplication(new App());

                //control.VideoCompletionEvent += Control_VideoCompletionEvent;   // Tried to invoke this on video completion but doesn't help. AppDelegate returns value first then this event is invoked.
                Task.Delay(7000).Wait();   // video is 7 seconds long                
            }
            catch (Exception ex)
            {
                Console.WriteLine("======== "+ex.Message);
            }
            Window.RootViewController = null;
            global::Xamarin.Forms.Forms.Init();
            LoadApplication(new App());
            return true;
        }
        //private bool Control_VideoCompletionEvent()
        //{
        //    //Window.RootViewController = null;
        //    //global::Xamarin.Forms.Forms.Init();
        //    //LoadApplication(new App());
        //    //return true;
        //}
}

VideoViewControllerVideoCutter 文件与上面链接中的相同。

谢谢

【问题讨论】:

    标签: xamarin.forms xamarin.ios avplayer splash-screen


    【解决方案1】:

    您可以通过以下方式在 AppDelegate 中启动 UIViewControl,并使用MessagingCenter 来通知在Xamarin.forms 中启动 Page:

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();
    
        Window = new UIWindow(UIScreen.MainScreen.Bounds);
    
        var control = new VideoViewController();
    
        Window.RootViewController = control;
        Window.MakeKeyAndVisible();
    
        MessagingCenter.Subscribe<object, object>(this, "ShowMainScreen", (sender, args) =>
        {
            LoadApplication(new App());
            base.FinishedLaunching(app, options);
        });
    
        return true;
    }
    

    在您的VideoViewController 中,当您的视频结束时发送MessagingCenter

    public override void ViewDidLoad()
    {
        View = new UniversalView();
        base.ViewDidLoad();
    
        // Perform any additional setup after loading the view
                
        NSTimer.CreateScheduledTimer(7, false, (obj) =>
        {
            MessagingCenter.Send<object, object>(this, "ShowMainScreen", null);
        });
    }
    

    您可以将发送操作放在videoCompleteEvent

    这里我上传了一个示例,你可以查看:LaunchViewController-xamarin.forms

    【讨论】:

    • 感谢@Jack Hua - MSFT,它成功了!!我不认为有消息中心:)
    • 您实际上需要 NSTimer.CreateScheduledTimer(7, true, (obj) 为 NSTimer.CreateScheduledTimer(7, false, (obj)),否则它将每 7 秒循环加载一次主屏幕。
    【解决方案2】:

    在你的情况下,这行是问题:

    LoadApplication(new App());
    

    因为它会导致 Xamarin 将您的 VideoViewController 替换为它自己的 ViewController。所以你需要在视频完成后把它放在其他地方(我看到你有一些注释掉那个事件的代码)。

    【讨论】:

      【解决方案3】:

      尝试在 RootViewController 行之后添加 MakeKeyAndVisible 行,如图所示:

      Window.RootViewController = control;
      Window.MakeKeyAndVisible();
      

      视频似乎正在后台播放。

      Here's a simple example 向您展示 Xamarin Native iOS 的工作原理,因为该示例完全以编程方式构建(没有 Xibs/Storyboard 更改),因此它可以帮助您更好地了解您在做什么

      【讨论】:

        猜你喜欢
        • 2020-12-14
        • 2021-12-15
        • 1970-01-01
        • 2019-05-11
        • 2014-01-09
        • 1970-01-01
        • 1970-01-01
        • 2013-01-23
        • 2019-03-22
        相关资源
        最近更新 更多