Xamarin.Forms 将视频设置为启动画面
Xamarin.Forms Set video as splash screen
我正在处理 xamarin.forms
共享项目。我在将视频设置为启动画面时遇到问题。我从 here 那里得到了参考。
我面临的问题是视频播放器已初始化并正在执行其过程,在那个时候,AppDelegate 代码首先 returns。所以视频不显示,但它的声音来了。有什么我想念的吗?
这里我合并了样本的VideoController
和VideoViewController
。我只使用 VideoViewController
并在 SetMoviePlayer()
函数
中引用资源文件夹中的视频
我试过的代码:
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;
//}
}
VideoViewController
和 VideoCutter
文件与上面 link 中的相同。
谢谢
在你的情况下,这一行就是问题所在:
LoadApplication(new App());
因为它会导致 Xamarin 将您的 VideoViewController
替换为自己的 ViewController
。所以你需要在视频完成后把它放在其他地方(我看到你有一些注释掉那个事件的代码)。
尝试在 RootViewController 行之后添加 MakeKeyAndVisible 行,如下所示:
Window.RootViewController = control;
Window.MakeKeyAndVisible();
好像正在后台播放视频。
Here's a simple example 向您展示 Xamarin Native iOS 的工作原理,因为该示例完全以编程方式构建(没有 Xibs/Storyboard 更改),因此它可以帮助您更好地理解您在做什么
您可以通过以下方式在 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
我正在处理 xamarin.forms
共享项目。我在将视频设置为启动画面时遇到问题。我从 here 那里得到了参考。
我面临的问题是视频播放器已初始化并正在执行其过程,在那个时候,AppDelegate 代码首先 returns。所以视频不显示,但它的声音来了。有什么我想念的吗?
这里我合并了样本的VideoController
和VideoViewController
。我只使用 VideoViewController
并在 SetMoviePlayer()
函数
我试过的代码:
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;
//}
}
VideoViewController
和 VideoCutter
文件与上面 link 中的相同。
谢谢
在你的情况下,这一行就是问题所在:
LoadApplication(new App());
因为它会导致 Xamarin 将您的 VideoViewController
替换为自己的 ViewController
。所以你需要在视频完成后把它放在其他地方(我看到你有一些注释掉那个事件的代码)。
尝试在 RootViewController 行之后添加 MakeKeyAndVisible 行,如下所示:
Window.RootViewController = control;
Window.MakeKeyAndVisible();
好像正在后台播放视频。
Here's a simple example 向您展示 Xamarin Native iOS 的工作原理,因为该示例完全以编程方式构建(没有 Xibs/Storyboard 更改),因此它可以帮助您更好地理解您在做什么
您可以通过以下方式在 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