Xamarin - MediaPicker没有显示iOS的videoPicker

时间:2014-07-15 23:28:37

标签: c# ios mono xamarin.ios xamarin

我尝试在我正在编写的主应用程序中执行此操作,但似乎无法使其工作。所以我创建了一个单视图应用程序来试用它并弄清楚但我似乎仍然被卡住了。他是我得到的。

public partial class HelloViewController : UIViewController
{
    partial class VideoPickerController : UIViewController
    {
        MediaPicker videoPicker;
        readonly TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
        public VideoPickerController (IntPtr handle) : base (handle)
        {
        }

        public override void DidReceiveMemoryWarning ()
        {
            // Releases the view if it doesn't have a superview.
            base.DidReceiveMemoryWarning ();

            // Release any cached data, images, etc that aren't in use.
        }

        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            var picker = new MediaPicker ();

            PresentViewController (picker.GetPickPhotoUI (), true, null);


        }
    }
}

基本上我得到的只是一个白色屏幕,没有任何反应。谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你不需要手动呈现它。这是我使用的代码,它会自动为我呈现UI。这段代码不在它自己的viewcontroller中,它只是在任何viewcontroller中,我有按钮它拍摄pic。相册和拍摄视频有类似的方法。

Here是github页面的链接,我在这里托管了这个示例应用程序。

var picker = new Xamarin.Media.MediaPicker();

btnCamera.Hidden = !picker.IsCameraAvailable;
btnCamera.TouchUpInside += async (sender, e) =>
{
    try
    {
        MediaFile file = 
            await picker.TakePhotoAsync(new StoreCameraMediaOptions());
        processImage(file);
    }
    catch { }
};

btnPhoto.Hidden = !picker.PhotosSupported;
btnPhoto.TouchUpInside += async (sender, e) =>
{
    try
    {
        MediaFile file = await picker.PickPhotoAsync();
        processImage(file);
    }
    catch { }
};

private void processImage(MediaFile file)
{
    if (file != null)
    {
        viewModel.Image = file.GetStream();
        viewModel.ImagePath = file.Path;
        setImage();
    }
}

private void setImage()
{
    try
    {
        System.Diagnostics.Debug.WriteLine(viewModel.ImagePath);
        if (!string.IsNullOrEmpty(viewModel.ImagePath) &&
            System.IO.File.Exists(viewModel.ImagePath))
        {
            imgImage.Image = new UIImage(NSData.FromFile(viewModel.ImagePath));
        }
        else if (viewModel.Image != null && viewModel.Image.Length != 0)
        {
            imgImage.Image = new UIImage(NSData.FromStream(viewModel.Image));
        }
    }
    //just don't load image
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message);
    }
}