-1
私が初めてAVFoundationを使用していますをスキャンしたときに私のビューは消え、私はちょっと働いて私のスクリプトを得ていますそのチケットが使用されているかどうかをチェックします。 (私はAPIログインを隠してしまった)。しかし、私はqrコードをスキャンするとすぐに、私のコードが実行され、私はコンソールでチケットの有効なplottetを得るが、viewcontrollerは解読し、私のログインページに戻ります。...私はQRコード
私はこのコードを使用しています。私のログインページでは、QRコードでviewcontrollerを表示しています。
let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "scanner") as UIViewController
self.present(viewController, animated: false, completion: nil)
QRスキャナを備えたビューコントローラ。
//
// scanner.swift
// GB Billet Scanner
//
// Created by Benjamin Eibye on 26/12/2017.
// Copyright © 2017 GymBilletter.dk. All rights reserved.
//
import UIKit
import AVFoundation
import Alamofire
class scanner: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
@IBOutlet weak var videoPreview: UIView!
@IBOutlet weak var navnLabel: UILabel!
let avCaptureSession = AVCaptureSession()
var returnValue: String = String()
enum error: Error {
case noCameraAvailable
case videoInputInitFail
}
override func viewDidLoad() {
super.viewDidLoad()
// Creating session
do {
try scanQRCode()
} catch {
print("Failed to scan the QR/BarCode")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
avCaptureSession.stopRunning()
if let metadataObject = metadataObjects.first {
let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject;
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
//print(readableObject.stringValue!);
navnLabel.text = "Indlæser billet #\(readableObject.stringValue!)"
let urlEnc = "https://domain?token=\(String(describing: UserDefaults.standard.object(forKey: "token")!))&ticket=\(readableObject.stringValue!)"
Alamofire.request(urlEnc).responseJSON { response in
//print(urlEnc)
//debugPrint(response)
//print(response.result)
if let result = response.result.value {
let JSON = result as! NSDictionary
if JSON["error"] as? Int == 5002 {
print("User not Authendicated")
print(urlEnc)
self.navnLabel.text = "Telefonen er ikke logget ind"
self.avCaptureSession.startRunning()
} else if JSON["error"] as? Int == 5003 {
print("Ticket not Found")
self.navnLabel.text = "Billetten blev ikke fundet"
self.avCaptureSession.startRunning()
} else {
// Billetten eksistere
print("Billet fundet")
if JSON["active"] as! String == "1" {
print("ticket Valid")
self.avCaptureSession.startRunning()
} else {
print("Billetten er blevet brugt")
self.navnLabel.text = "Billetten er blevet brugt \(String(describing: JSON["used_date"]))"
}
}
}
}
}
dismiss(animated: true)
}
func scanQRCode() throws {
guard let avCaptureDevice = AVCaptureDevice.default(for: AVMediaType.video) else {
print("no camera.")
throw error.noCameraAvailable
}
guard let avCaptureInput = try? AVCaptureDeviceInput(device: avCaptureDevice) else {
print("Faild to init camera.")
throw error.videoInputInitFail
}
let avCaptureMetadataOutput = AVCaptureMetadataOutput()
avCaptureMetadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
avCaptureSession.addInput(avCaptureInput)
avCaptureSession.addOutput(avCaptureMetadataOutput)
avCaptureMetadataOutput.metadataObjectTypes = [AVMetadataObject.ObjectType.qr]
let avCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: avCaptureSession)
avCaptureVideoPreviewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
avCaptureVideoPreviewLayer.frame = videoPreview.bounds
self.videoPreview.layer.addSublayer(avCaptureVideoPreviewLayer)
avCaptureSession.startRunning()
}
@IBAction func anuller(_ sender: Any) {
navnLabel.text = "Scan billet."
avCaptureSession.startRunning()
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
ありがとう、私は今、どのように愚かな質問だったかを見ることができます。しかし、本当にありがとうございました。スクリプトのPHPから4時間遅れてしまいました。 –