RedLaserとMonoTouchを使用して、簡単なバーコードスキャンアプリを開発しています。提供されているサンプルコードを使用しましたが、コードをiphoneにデプロイでき、バーコードを正常にスキャンします。
ただし、カメラビューは表示されていません。アクティブ領域は空白です。下の画像をご覧ください
サンプルを実行すると、正常に動作します。ビューとコントローラーの配線に関係していると思います
私のコードは次のようなものです:
public partial class BarcodeScanModalController : CameraOverlayViewController
{
CAShapeLayer Rectanglelayer;
bool IsSilent;
public BarcodeScanModalController (IntPtr handle) : base (handle)
{
}
public BarcodeScanModalController ()
{
}
internal void BeepOrVibrate ()
{
if (!IsSilent)
{
SystemSound.FromFile ("Sounds/beep.wav").PlayAlertSound ();
}
}
void setPortraitLayout ()
{
// Set portrait
ParentPicker.Orientation = UIImageOrientation.Up;
// Set the active scanning region for portrait mode
ParentPicker.ActiveRegion = new RectangleF (0, 100, 320, 250);
// Activate the new settings
ParentPicker.ResumeScanning ();
// Animate the UI changes
CGAffineTransform transform = CGAffineTransform.MakeRotation (0);
//this.View.Transform = transform;
UIView.BeginAnimations ("rotateToPortrait");
//UIView.SetAnimationDelegate = this;
UIView.SetAnimationCurve (UIViewAnimationCurve.Linear);
UIView.SetAnimationDuration (0.5f);
setActiveRegionRect ();
UIView.CommitAnimations (); // Animate!
}
CGPath newPathInRect (RectangleF rect)
{
CGPath path = new CGPath ();
path.AddRect (rect);
return path;
}
void setActiveRegionRect ()
{
Rectanglelayer.Frame = new RectangleF ( ParentPicker.ActiveRegion.X,
ParentPicker.ActiveRegion.Y,
ParentPicker.ActiveRegion.Width,
ParentPicker.ActiveRegion.Height
);
CGPath path = newPathInRect (Rectanglelayer.Bounds);
Rectanglelayer.Path = path;
Rectanglelayer.SetNeedsLayout ();
}
次に、このOverlayControllerを次のように使用します。
public void ScanItemsButtonPressed (object sender, EventArgs e)
{
if (overlayController == null)
{
overlayController = new BarcodeScanModalController { ModalTransitionStyle = UIModalTransitionStyle.FlipHorizontal};
}
if (overlayController.ParentPicker == null)
{
BarcodePickerController picker = new BarcodePickerController ();
picker.Overlay = overlayController;
picker.Delegate = new BarcodePickerDelegate (this);
picker.Orientation = UIImageOrientation.Up;
}
overlayController.ParentPicker.ScanUPCE = true;
overlayController.ParentPicker.ScanEAN8 = true;
overlayController.ParentPicker.ScanEAN13 = true;
// overlayController.ParentPicker.ScanSTICKY = false;
overlayController.ParentPicker.ScanQRCODE = false;
overlayController.ParentPicker.ScanCODE128 = true;
overlayController.ParentPicker.ScanCODE39 = true;
overlayController.ParentPicker.ScanITF = true;
// Data matrix decoding does not work very well so it is disabled for now
overlayController.ParentPicker.ScanDATAMATRIX = false;
// hide the status bar
UIApplication.SharedApplication.StatusBarHidden = true;
overlayController.Done += delegate {
DismissModalViewControllerAnimated (true);
} ;
this.PresentModalViewController (overlayController.ParentPicker, true);
}
私はMonoTouch6.0.8、RedLaser 3.4.0、およびXCode4.5.2を使用しています。助けていただければ幸いです。ありがとう