Xamarin.Forms 将视频设置为初始屏幕



我正在做xamarin.forms共享项目。我在将视频设置为初始屏幕时遇到问题。我从这里得到了参考。

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

在这里,我合并了样本的VideoControllerVideoViewController。我只使用VideoViewController并从SetMoviePlayer()功能中的资源文件夹中引用我的视频

我尝试的代码:

应用代表.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文件与上面的链接相同。

谢谢

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

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

在您的情况下,此行是问题所在:

LoadApplication(new App());

因为它会导致 Xamarin 用自己的ViewController替换您的VideoViewController。因此,您需要在视频完成后将其放在其他地方(我看到您对该事件有一些注释掉的代码(。

尝试在

RootViewController 行之后添加 MakeKeyAndVisible 行,如下所示:

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

视频似乎正在后台播放。

下面是一个简单的示例,演示 Xamarin 本机 iOS 的工作原理,因为该示例完全以编程方式生成(没有 Xib/情节提要更改(,因此它可以帮助你更好地了解你正在执行的操作

最新更新