Xamarin формы: выбранное изображение не отображается в пользовательском интерфейсе из галереи и камеры для IOS - PullRequest
0 голосов
/ 22 ноября 2018

Полный сценарий

У меня есть значок добавления на одной странице, он будет отображать параметры камеры и галереи при нажатии.Если выбрать камеру, я открою другую страницу контента и открою камеру там.Но захваченное изображение не отображается в пользовательском интерфейсе.То же самое для галереи, выбранное изображение из галереи не отображается в пользовательском интерфейсе.Эта функция работает нормально в Android и не работает в IOS.

Коды

When click add icon

string action = await DisplayActionSheet(null, "Cancel", null, "Camera", "Gallery");
            if (action == "Camera")
            {
                await Navigation.PushModalAsync(new NewTweetPage("Camera"));
            }
            else if (action == "Gallery")
            {
                await Navigation.PushModalAsync(new NewTweetPage("Gallery"));
            }

When entering next page

public NewTweetPage(String medium)
        {
            InitializeComponent();
            if (medium == "Camera" )
            {
                OpenMyCamera(); 
            }
            else if(medium == "Gallery")
            {
                OpenMygallery();
            }
        }

public async void OpenMyCamera()
        {
            try
            {
                await CrossMedia.Current.Initialize();

                if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
                {
                    await DisplayAlert("Camera", "No camera available.", "OK");
                    return;
                }

                _mediaFile = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
                {
                    Directory = "Sample",
                    Name = "test.jpg",
                    AllowCropping = true
                });

                if (_mediaFile == null)
                    return;
                tweetPicture.Source = ImageSource.FromStream(() =>
                {
                    isPicture = true;
                    return _mediaFile.GetStream();
                });
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
            }
        }



public async void OpenMygallery()
        {
            try
            {
                await CrossMedia.Current.Initialize();

                if (!CrossMedia.Current.IsPickPhotoSupported)
                {
                    await DisplayAlert("Gallery", ":( No photos available.", "OK");
                    return;
                }

                _mediaFile = await CrossMedia.Current.PickPhotoAsync();

                if (_mediaFile == null)
                    return;
                tweetPicture.Source = ImageSource.FromStream(() =>
                {
                    isPicture = true;
                    return _mediaFile.GetStream();
                });
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception:>" + ex);
            }
        }

Тот же код отлично работает в части страницы профиля, но в этом случае навигация по страницам отсутствует, все происходит на одной странице.

Не знаю, в чем проблема с текущим кодом, пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 23 ноября 2018

Размещение команд навигации в конструкторе может вызвать проблемы.Я бы порекомендовал поместить их в переопределение OnAppearing.Кроме того, вместо try...catch вокруг большой секции кода, вы должны обрабатывать нулевые проверки или аналогичные в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...