Xamarin.Forms Установить видео в качестве заставки - PullRequest
3 голосов
/ 18 июня 2019

Я работаю над общим проектом xamarin.forms. У меня проблема с настройкой видео в качестве заставки. Я получил ссылку от здесь .

Проблема, с которой я сталкиваюсь, заключается в том, что видеопроигрыватель инициализируется и выполняет свою работу, и в это время сначала возвращается код AppDelegate. поэтому видео не отображается, но его звук идет. Я что-то пропустил?

Здесь я слил 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 Файлы такие же, как в ссылке выше.

Спасибо

Ответы [ 3 ]

3 голосов
/ 19 июня 2019

Вы можете запустить UIViewControl в AppDelegate следующим образом и использовать MessagingCenter, чтобы уведомить о запуске Страницы в Xamarin.forms:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();

    Window = new UIWindow(UIScreen.MainScreen.Bounds);

    UIViewController1 control = new UIViewController1();

    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, true, (obj) =>
            {
                MessagingCenter.Send<object, object>(this, "ShowMainScreen", null);
            });
        }

Вы можете поместить действие отправки в videoCompleteEvent.

Здесь я загрузил образец и вы можете проверить его: LaunchViewController-xamarin.forms

1 голос
/ 18 июня 2019

Попробуйте добавить строку MakeKeyAndVisible после строки RootViewController, как показано:

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

Похоже, что видео воспроизводится в фоновом режиме.

Вот простой пример , чтобы показать вам, как работает Xamarin Native iOS, так как этот пример полностью собран программно (без изменений Xibs / Storyboard), что поможет вам лучше понять, что вы делаете

1 голос
/ 18 июня 2019

В вашем случае эта строка является проблемой:

LoadApplication(new App());

Так как Xamarin заменяет ваш VideoViewController своим ViewController. Поэтому вам нужно поместить его в другое место после завершения видео (я вижу, что у вас есть закомментированный код для этого события).

...