VNDocumentCameraViewController dalam Formulir Xamarin membeku
Saya ingin menggunakan yang baru VNDocumentCameraViewControllerdari iOS 13 di Aplikasi Formulir Xamarin saya dengan perender khusus. Ini berfungsi, tetapi terkadang setelah beberapa detik pratinjau dari kamera berhenti dan saya tidak memiliki kesempatan untuk melakukan apa pun pada pengontrol tampilan.
Untuk mereproduksi kesalahan, saya telah mengurangi kode saya menjadi berikut:
Tampilan kustom:
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>
Perender kustom
[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);
}
}
}
}
Ini sebagian besar terjadi saat menggerakkan kamera dengan cepat dari kiri ke kanan dan belakang, tetapi terkadang juga tanpa melakukan apa pun.
Saya tidak menemukan siapa pun yang mencoba menggunakan VNDocumentCameraViewControllerdengan Formulir Xamarin. Apa yang saya lakukan salah? Atau apakah ada bug?
Jawaban
Saya telah menemukan solusinya ... aku berjuang dua hari di atasnya dan sekarang saya menemukan, bahwa sampah melakukan yang f *** pekerjaan dan menghancurkan saya scannerControllersetelah beberapa waktu / disebut Dispose()dari VNDocumentCameraViewController. Jika saya mengubahnya menjadi anggota kelas, itu berhasil:
Perender kustom
[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);
}
}
}
}