2017-03-22 1 views
0

Je veux scanner un code à barres et renvoyer le résultat. J'utilise ZXing pour ça. Pour Zxing lorsque sa superposition par défaut, il naviguerait vers une nouvelle page et le scan fonctionnerait parfaitement. Je veux rester sur la même page et je veux une sous-vue pour activer la caméra et commencer la numérisation. Quelqu'un peut-il conseiller comment faire cela?Comment faire pour superposition de douane Zebra Xing (Zxing) sous-vue dans Xamarin iOS

MyCode:

MobileBarcodeScanner scanner; 
    CustomOverlayView customOverlay; 
    ZXingScannerView scannerView; 
    UIActivityIndicatorView loadingView; 
    UIView loadingBg; 
    public event Action<ZXing.Result> OnScannedResult; 
    public MobileBarcodeScanningOptions ScanningOptions { get; set; } 

    public override void ViewDidLoad() 
    { 
     camView = new UIView(new CGRect(0, 0, this.View.Frame.Width, this.View.Frame.Height/4)) { BackgroundColor = UIColor.Clear }; 
     scanner = new MobileBarcodeScanner(); 

     Root = new RootElement("ZXingDwatNet.Mobile") { 
      new Section { 


       camView 
      } 
     }; 


     scannerView = new ZXingScannerView(); 

     camView = scannerView; 
     loadingBg = camView;// new UIView(this.View.Frame) { BackgroundColor = UIColor.Purple, AutoresizingMask = UIViewAutoresizing.FlexibleDimensions }; 
     loadingView = new UIActivityIndicatorView(UIActivityIndicatorViewStyle.Gray) 
     { 
      AutoresizingMask = UIViewAutoresizing.FlexibleMargins 
     }; 
     loadingView.Frame = new CGRect((this.View.Frame.Width - loadingView.Frame.Width)/4, 
      (this.View.Frame.Height - loadingView.Frame.Height)/4, 
      loadingView.Frame.Width/4, 
      loadingView.Frame.Height/4); 

     loadingBg.AddSubview(loadingView); 
     View.AddSubview(loadingBg); 
     loadingView.StartAnimating(); 

     this.View.InsertSubviewBelow(scannerView, loadingView); 

     this.View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight; 

     scanner.UseCustomOverlay = true; 
     scanner.CustomOverlay = camView; 
     var options = new MobileBarcodeScanningOptions 
     { 
      AutoRotate = false, 
      TryHarder = true 
     }; 
     Task.Run(async() => 
     { 
      var result = await scanner.Scan(options, false); 
      HandleScanResult(result); 
     }); 


    } 

    void HandleScanResult(ZXing.Result result) 
    { 
     string msg = ""; 

     if (result != null && !string.IsNullOrEmpty(result.Text)) 
      msg = "Found Barcode: " + result.Text; 
     else 
      msg = "Scanning Canceled!"; 

     this.InvokeOnMainThread(() => 
     { 
      var av = new UIAlertView("Barcode Result", msg, null, "OK", null); 
      av.Show(); 
     }); 
    } 

    public override void ViewDidAppear(bool animated) 
    { 
     scannerView.OnScannerSetupComplete += HandleOnScannerSetupComplete; 
     camView = scannerView; 
     //originalStatusBarStyle = UIApplication.SharedApplication.StatusBarStyle; 
     var opt = new MobileBarcodeScanningOptions(); 
     opt.DelayBetweenContinuousScans = 3000; 
     ScanningOptions = opt; 

     if (UIDevice.CurrentDevice.CheckSystemVersion(7, 0)) 
     { 
      UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.Default; 
      SetNeedsStatusBarAppearanceUpdate(); 
     } 
     else 
      UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.BlackTranslucent, false); 

     Console.WriteLine("Starting to scan..."); 

     Task.Factory.StartNew(() => 
     { 
      BeginInvokeOnMainThread(() => scannerView.StartScanning(result => 
      { 

       //if (!ContinuousScanning) 
       //{ 
        // Console.WriteLine("Stopping scan..."); 
        // scannerView.StopScanning(); 
       //} 

       var evt = this.OnScannedResult; 
       if (evt != null) 
        evt(result); 

      }, this.ScanningOptions)); 
     }); 
    } 

    void HandleOnScannerSetupComplete() 
    { 
     BeginInvokeOnMainThread(() => 
     { 
      if (loadingView != null && loadingBg != null && loadingView.IsAnimating) 
      { 
       loadingView.StopAnimating(); 

       UIView.BeginAnimations("zoomout"); 

       UIView.SetAnimationDuration(2.0f); 
       UIView.SetAnimationCurve(UIViewAnimationCurve.EaseOut); 

       loadingBg.Transform = CGAffineTransform.MakeScale(2.0f, 2.0f); 
       loadingBg.Alpha = 0.0f; 

       UIView.CommitAnimations(); 


       loadingBg.RemoveFromSuperview(); 
      } 
     }); 
    } 
+0

Vous voulez démarrer la caméra dans votre '' 'ScanView'''? –

+0

Oui, celui qui est fourni par Zxing qui scanne pour le code-barres. – TheDeveloper

Répondre

2

Vous devez utiliser ZXingScannerView et l'ajouter à votre point de vue. Vous pouvez voir comment utiliser ZXingScannerView dans ZXingScannerViewController

+0

Pouvez-vous donner un petit exemple David? J'ai essayé mais cela n'a pas fonctionné comme prévu. – TheDeveloper

+0

J'ai mis à jour ma question avec le code, pouvez-vous regarder ce qui me manque? – TheDeveloper

+0

Vous devez commencer la numérisation: https://github.com/Redth/ZXing.Net.Mobile/blob/master/Source/ZXing.Net.Mobile.iOS/ZXingScannerViewController.cs#L143 –