- Registriert
- 25.04.12
- Beiträge
- 132
Hallo alle zusammen,
seit knapp ner Woche beschäftige ich mit Xcode und Swift und bin dabei eine erst App zu "entwickeln"
Was das lernen angeht: Ich bevorzuge "learning by doing"
mir liegt es nicht so gut, iwelche Bücher zu lesen und die ganze theorie in meinen Kopf zu hämmern.
Aus Erfahrung bewährt sich bislang immer eine Resultat anzuschauen und daraus zu lernen.
Ich hoffe Ihr könnt mir auf diesem Wege helfen.
Jetzt zur eigentlichen Problematik.
Habe ein schönen Quellcode gefunden, der alle möglichen Barcodes scannen einlesen kann:
Allerdings ist mir aufgelanne (was auf der eine Seite eigentlich ganz witzig ist, aber auch unschön) dass wenn man anstatt über einen Barcode, über ein Gesicht mit der Kamera geht, stürzt die App ab.
Könnte mir jemand verraten was das beudetet?
*UPDATE*
Habe den Fehler gefunden. Hatt unter BarCodeTypes
AVMetadataObjectTypeFace drin ...
seit knapp ner Woche beschäftige ich mit Xcode und Swift und bin dabei eine erst App zu "entwickeln"
Was das lernen angeht: Ich bevorzuge "learning by doing"
mir liegt es nicht so gut, iwelche Bücher zu lesen und die ganze theorie in meinen Kopf zu hämmern.
Aus Erfahrung bewährt sich bislang immer eine Resultat anzuschauen und daraus zu lernen.
Ich hoffe Ihr könnt mir auf diesem Wege helfen.
Jetzt zur eigentlichen Problematik.
Habe ein schönen Quellcode gefunden, der alle möglichen Barcodes scannen einlesen kann:
Code:
/*************** SCAN ***************/
func StartScan() {
// Button Scan ausblenden
self.navigationItem.rightBarButtonItem = nil
// Button Scan abbrechen einblenden
self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Stop, target: self, action: "ScanAbbrechen")
self.navigationItem.leftBarButtonItem!.tintColor = UIColor.whiteColor()
self.highlightView.autoresizingMask = .FlexibleTopMargin | .FlexibleBottomMargin | .FlexibleLeftMargin | .FlexibleRightMargin
self.highlightView.layer.borderColor = UIColor.greenColor().CGColor
self.highlightView.layer.borderWidth = 3
self.view.addSubview(self.highlightView)
var error : NSError? = nil
let input : AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput
// Button ToogleLight einblenden falls vorhanden
if (device.hasTorch) {
var imageViewright:UIImageView = UIImageView()
imageViewright.frame = CGRectMake(0, 0, 26, 26)
var rightImage:UIImage = UIImage(named: "light")!
imageViewright.image = rightImage
var rightView:UIView = UIView()
rightView.frame = CGRectMake(0, 0, 26, 26)
rightView.addSubview(imageViewright)
var rightGestureRecognizer:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "ToogleLight")
rightView.addGestureRecognizer(rightGestureRecognizer)
var rightItem:UIBarButtonItem = UIBarButtonItem()
rightItem.customView = rightView
self.navigationItem.rightBarButtonItem = rightItem
rightItem.tintColor = UIColor.whiteColor()
}
if input != nil {
session.addInput(input)
}
let output = AVCaptureMetadataOutput()
output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
session.addOutput(output)
output.metadataObjectTypes = output.availableMetadataObjectTypes
previewLayer = AVCaptureVideoPreviewLayer.layerWithSession(session) as! AVCaptureVideoPreviewLayer
previewLayer.frame = self.view.bounds
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
self.view.layer.addSublayer(previewLayer)
session.startRunning()
}
/*************** BARCODE GEFUNDEN ***************/
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
var highlightViewRect = CGRectZero
var barCodeObject : AVMetadataObject!
var detectionString : String!
let barCodeTypes = [
AVMetadataObjectTypeUPCECode,
AVMetadataObjectTypeCode39Code,
AVMetadataObjectTypeCode39Mod43Code,
AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeCode93Code,
AVMetadataObjectTypeCode128Code,
AVMetadataObjectTypePDF417Code,
AVMetadataObjectTypeQRCode,
AVMetadataObjectTypeAztecCode,
AVMetadataObjectTypeITF14Code,
AVMetadataObjectTypeInterleaved2of5Code,
AVMetadataObjectTypeFace,
AVMetadataObjectTypeDataMatrixCode
]
for metadata in metadataObjects {
for barcodeType in barCodeTypes {
if metadata.type == barcodeType {
barCodeObject = self.previewLayer.transformedMetadataObjectForMetadataObject(metadata as! AVMetadataMachineReadableCodeObject)
highlightViewRect = barCodeObject.bounds
detectionString = (metadata as! AVMetadataMachineReadableCodeObject).stringValue
self.session.stopRunning()
self.previewLayer.removeFromSuperlayer()
if let oldInputs = self.previewLayer?.session.inputs{
for oldInput in oldInputs{
self.previewLayer?.session.removeInput(oldInput as! AVCaptureInput)
}
}
if let oldOutputs = self.previewLayer?.session.outputs{
for oldOutputs in oldOutputs{
self.previewLayer?.session.removeOutput(oldOutputs as! AVCaptureOutput)
}
}
let newItem = NSEntityDescription.insertNewObjectForEntityForName("EAN_TEMP", inManagedObjectContext: self.managedObjectContext!) as! EAN_TEMP
newItem.eancode = "\(detectionString)"
println ("\(detectionString)")
performSegueWithIdentifier("goToNextViewer", sender: nil)
break
}
}
}
}
Allerdings ist mir aufgelanne (was auf der eine Seite eigentlich ganz witzig ist, aber auch unschön) dass wenn man anstatt über einen Barcode, über ein Gesicht mit der Kamera geht, stürzt die App ab.
2015-06-01 07:54:46 +0000
Could not cast value of type 'AVMetadataFaceObject' (0x197b606a0) to 'AVMetadataMachineReadableCodeObject' (0x197b60740).
(lldb)
Könnte mir jemand verraten was das beudetet?
*UPDATE*
Habe den Fehler gefunden. Hatt unter BarCodeTypes
AVMetadataObjectTypeFace drin ...
Zuletzt bearbeitet: