我想在我的Xamarin Forms应用程序中使用来自iOS 13的新iOS和一个自定义呈现器。它可以工作,但有时几秒钟后,预览从相机冻结,我没有机会做任何事情上的视图控制器。
为了再现错误,我将代码简化为以下内容:
自定义视图:
public sealed class Scanner : View
{
}MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App1"
x:Class="App1.MainPage">
<local:Scanner />
</ContentPage>自定义渲染器
[assembly: ExportRenderer(typeof(App1.Scanner), typeof(App1.iOS.ScannerRenderer))]
namespace App1.iOS
{
public class ScannerRenderer : ViewRenderer<Scanner, UIView>
{
protected override void OnElementChanged(ElementChangedEventArgs<Scanner> e)
{
base.OnElementChanged(e);
if (this.Control == null)
{
VNDocumentCameraViewController scannerController = new VNDocumentCameraViewController();
this.SetNativeControl(scannerController.View);
}
}
}
}它主要发生在相机从左向右和向后快速移动时,但有时也不做任何事情。
我没有找到任何试图在Xamarin表单中使用VNDocumentCameraViewController的人。我做错什么了?还是有窃听器?
发布于 2020-09-18 15:33:46
我已经找到了解决方案.我在这上面挣扎了两天,现在我发现垃圾收集器完成了他的工作,并在一段时间后销毁了我的scannerController /称为Dispose() of VNDocumentCameraViewController。如果我将它更改为类成员,它就有效了:
自定义渲染器
[assembly: ExportRenderer(typeof(App1.Scanner), typeof(App1.iOS.ScannerRenderer))]
namespace App1.iOS
{
public class ScannerRenderer : ViewRenderer<Scanner, UIView>
{
private VNDocumentCameraViewController scannerController;
protected override void OnElementChanged(ElementChangedEventArgs<Scanner> e)
{
base.OnElementChanged(e);
if (this.Control == null)
{
this.scannerController = new VNDocumentCameraViewController();
this.SetNativeControl(this.scannerController.View);
}
}
}
}https://stackoverflow.com/questions/63958302
复制相似问题