MvvmCross picturechoosen 插件和相机卡住问题

Posted

技术标签:

【中文标题】MvvmCross picturechoosen 插件和相机卡住问题【英文标题】:MvvmCross picturechoosen plugin and camera stuck issue 【发布时间】:2014-02-08 06:39:12 【问题描述】:

您好,我在使用 Xamarin 进行 ios 开发的 MvvmCross 图片选择器插件时遇到了一个奇怪的问题。我正在开发一种表单,用户可以在其中选择/拍摄多张照片和一段视频。

我的应用允许用户从相机胶卷中添加多张照片,或者直接从表单中捕获。

为了捕捉视频,我使用Xamarin.Mobile api。

我正在使用选择的 MvvmCross 图片来执行此操作。使用相机拍摄 1 或 2 张图像/视频时会出现此问题。

当第三次重新进入相​​机屏幕时捕获 1 或 2 张图像/视频时,图像是静态的并且不会更新相机取景器。视图停留在最后捕获的任何内容的最后一帧。

我有同样的问题described here,但唯一的区别是我使用了MvvmCross picture choosen plugin。

在我的代码中,我曾经将命令与我的按钮绑定如下:

// MyView is inherited from MvxViewController (of mvvmcross) 
var set = this.CreateBinding<MyView,MyViewModel>();

//Binding button to picture chooser command
set.Bind(this.TakePhotoButton).To(vm=>vm.TakePictureCommand);

在我的视图模型中:

public MvxCommand TakePictureCommand 
 
  get 
   
    this.takePictureCommand => this.takePictureCommand ?? new MvxCommand(()=>
           this.pictureChooserTask.TakePicture(300,95,this.OnPictureSelected,
           ()=>),,this.CanTakeOrChoosePicture); 
   


private void OnPictureSelected(Stream stream) 
 
   using(var memoryStream = new MemoryStream())
    
     stream.CopyTo(memoryStream); 
     // PictureBytes is a property which i am using to bind with image view
     this.PictureBytes= memoryStream.ToArray(); 
    


  private bool CanTakeOrChoosePicture() 
   
   return this.PictureBytes= null; 
   

谁能指导我我做错了什么?

【问题讨论】:

【参考方案1】:

查看iOS Monotouch UIImagePickerController multiple photos / videos from camera,这似乎是 Xamarin.iOS 或 iOS/UIKit 中的问题。

您是否在主要的 MvvmCross 示例应用中发现了同样的问题?

如果这样做,那么您可以尝试更改 MvvmCross 代码以使用委托,而不是 iOS Monotouch UIImagePickerController multiple photos / videos from camera 中建议的 Xamarin.iOS C# 事件 - Mvx 代码位于 https://github.com/MvvmCross/MvvmCross/blob/v3.1/Plugins/Cirrious/PictureChooser/Cirrious.MvvmCross.Plugins.PictureChooser.Touch/MvxImagePickerTask.cs

您也许可以尝试的另一件事是为每个图像请求使用单独的任务 - 例如每次使用var task = Mvx.Resolve&lt;IMvxPictureChooserTask(); 获取一个新任务,而不是每次都使用相同的构造函数注入任务。

如果没有其他帮助,那么也许可以尝试联系 Xamarin 支持,看看他们是否知道这个问题并有任何建议。

【讨论】:

我使用了var task = Mvx.Resolve&lt;IMvxPictureChooserTask();,现在问题似乎已经解决了(至少现在是这样)。感谢您的支持。

以上是关于MvvmCross picturechoosen 插件和相机卡住问题的主要内容,如果未能解决你的问题,请参考以下文章

MvvmCross 6 中的子类 UIWindow

“Raw”Xamarin和MvvmCross

mvvmcross 应用程序单例生命周期

是否有mvvmcross提供的标签式布局平台?

MvvmCross.Forms 5.4:如何设置 UWP 项目?

MvvmCross、Xamarin Studio 和 ICommands