2016-05-23 5 views
1

私のアプリケーションでは、QAコードを読む必要があります。 QRコードの文字列を初めて表示します。しかし、2回目に私はそれを使用しようとします。キャプチャされた写真モードでは停止していますが、バッキングコードのフローは実行中です。私のIOSアプリケーションでQRを「2度目」にキャプチャしている間に画面がスクロールした

import UIKit 
import AVFoundation 

class BarCodeViewController: UIViewController,AVCaptureMetadataOutputObjectsDelegate { 

var captureSession: AVCaptureSession! 
var previewLayer: AVCaptureVideoPreviewLayer! 
let appDelegat : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

override func viewDidLoad() { 
    super.viewDidLoad() 

    view.backgroundColor = UIColor.blackColor() 
    captureSession = AVCaptureSession() 

    let videoCaptureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 
    let videoInput: AVCaptureDeviceInput 

    do { 
     videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice) 
    } catch { 
     return 
    } 

    if (captureSession.canAddInput(videoInput)) { 
     captureSession.addInput(videoInput) 
    } else { 
     failed(); 
     return; 
    } 

    let metadataOutput = AVCaptureMetadataOutput() 

    if (captureSession.canAddOutput(metadataOutput)) { 
     captureSession.addOutput(metadataOutput) 

     metadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue()) 
     metadataOutput.metadataObjectTypes = [AVMetadataObjectTypeQRCode] 
    } else { 
     failed() 
     return 
    } 

    previewLayer = AVCaptureVideoPreviewLayer(session: captureSession); 
    previewLayer.frame = view.layer.bounds; 
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
    view.layer.addSublayer(previewLayer); 

    captureSession.startRunning(); 

     } 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


func failed() { 
    let ac = UIAlertController(title: "Scanning not supported", message: "Your device does not support scanning a code from an item. Please use a device with a camera.", preferredStyle: .Alert) 
    ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 
    presentViewController(ac, animated: true, completion: nil) 
    captureSession = nil 
} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    if (captureSession?.running == false) { 
     captureSession.startRunning(); 
    } 
} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    if (captureSession?.running == true) { 
     captureSession.stopRunning(); 
    } 
} 

func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { 
    captureSession.stopRunning() 

    if let metadataObject = metadataObjects.first { 
     let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject; 

     AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 
     foundCode(readableObject.stringValue); 
    } 


} 

func foundCode(code: String) { 
    var x = code.componentsSeparatedByString("-") 

    let productProfile = ProductDetailViewController(nibName: "ProductDetailViewController", bundle: nil) 


    productProfile.ProductCode = x[1] 
     dismissViewControllerAnimated(true, completion: nil) 


    appDelegat.centerContainer!.centerViewController = productProfile 
} 

override func prefersStatusBarHidden() -> Bool { 
    return true 
} 

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return .Portrait 
    } 
} 

私はこの

答えて

0
func foundCode(code: String) { 
    var x = code.componentsSeparatedByString("-") 
    let productProfile = ProductDetailViewController(nibName:     "ProductDetailViewController", bundle: nil) 
    productProfile.ProductCode = x[1] 
    captureSession.stopRunning() 
     dismissViewControllerAnimated(true, completion: nil) 
    self.navigationController?.popViewControllerAnimated(false) 
    appDelegat.centerContainer!.centerViewController = productProfile 
} 

で私を助けてくださいself.navigationController?.popViewControllerAnimated(false)

を追加しました。..しようとしたが、それを把握することはできません
関連する問題