Xamarin形式:所选图片未在IOS的图库和相机的UI中显示

时间:2018-11-22 12:55:35

标签: xamarin.forms camera gallery

完整方案

我在一页上有一个添加图标,点击时它将显示相机和图库选项。如果选择相机,我将打开另一个内容页面并在其中打开相机。但是捕获的图片未显示在UI中。与图库相同,从图库中选择的图像不会显示在UI中。此功能在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 :(得分:1)

在构造器中放置导航命令可能会导致问题。我建议将它们放在OnAppearing替代中。同样,您应该处理空检查或类似的代码,而不是在大部分代码中使用try...catch