是否可以从 swift 中的二维码读取触发 segue
Is it possible to trigger a segue from a qr code reading in swift
我有一个快速的 ios swift 编程问题。是否可以从 swift 中的 QR 码读取触发 segue?我在 Google 上查找并发现了这个 app coda 教程。我仍然不明白我将如何使用 segue 来做这件事。有人可以解释他们是如何在应用程序中做到这一点的吗?谢谢!
更新
感谢 Christian Woerz 提供的有用提示!
我知道怎么做了!
当这个函数:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
// Check if the metadataObjects array is not nil and it contains at least one object.
if metadataObjects == nil || metadataObjects.count == 0 {
qrCodeFrameView?.frame = CGRectZero
messageLabel.text = "No QR code is detected"
return
}
// Get the metadata object.
let metadataObj = metadataObjects[0] as AVMetadataMachineReadableCodeObject
if metadataObj.type == AVMetadataObjectTypeQRCode {
// If the found metadata is equal to the QR code metadata then update the status label's text and set the bounds
let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj as AVMetadataMachineReadableCodeObject) as AVMetadataMachineReadableCodeObject
qrCodeFrameView?.frame = barCodeObject.bounds;
if metadataObj.stringValue != nil {
messageLabel.text = metadataObj.stringValue
}
}
}
被解雇了,像这样在函数内部做一个performSegueWithIdentifier(_ identifier: String?, sender sender: AnyObject?)
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
// Check if the metadataObjects array is not nil and it contains at least one object.
if metadataObjects == nil || metadataObjects.count == 0 {
qrCodeFrameView?.frame = CGRectZero
messageLabel.text = "No QR code is detected"
return
}
// Get the metadata object.
let metadataObj = metadataObjects[0] as AVMetadataMachineReadableCodeObject
if metadataObj.type == AVMetadataObjectTypeQRCode {
// If the found metadata is equal to the QR code metadata then update the status label's text and set the bounds
let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj as AVMetadataMachineReadableCodeObject) as AVMetadataMachineReadableCodeObject
qrCodeFrameView?.frame = barCodeObject.bounds;
if metadataObj.stringValue != nil {
messageLabel.text = metadataObj.stringValue
}
}
**performSegueWithIdentifier(_ identifier: String?, sender sender: AnyObject?)**
}
并像
一样传入 segue 的标识符
Identifier: thetransition
未经测试的代码,但有逻辑:)
是的,这是可能的。
但我们只能给你一个笼统的答案,因为有许多不同的方法和库可以读取二维码。但举个小例子,您可以使用 this tutorial 中的 QR 码 reader。
如果您使用本教程中提供的代码读取 QR 码,将调用一个方法来接收 QR 码的数据。在教程中它是 captureOutput
.
然后在此方法中,如果调用该方法,您可以添加代码以执行 segue。
我有一个快速的 ios swift 编程问题。是否可以从 swift 中的 QR 码读取触发 segue?我在 Google 上查找并发现了这个 app coda 教程。我仍然不明白我将如何使用 segue 来做这件事。有人可以解释他们是如何在应用程序中做到这一点的吗?谢谢!
更新
感谢 Christian Woerz 提供的有用提示!
我知道怎么做了!
当这个函数:
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
// Check if the metadataObjects array is not nil and it contains at least one object.
if metadataObjects == nil || metadataObjects.count == 0 {
qrCodeFrameView?.frame = CGRectZero
messageLabel.text = "No QR code is detected"
return
}
// Get the metadata object.
let metadataObj = metadataObjects[0] as AVMetadataMachineReadableCodeObject
if metadataObj.type == AVMetadataObjectTypeQRCode {
// If the found metadata is equal to the QR code metadata then update the status label's text and set the bounds
let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj as AVMetadataMachineReadableCodeObject) as AVMetadataMachineReadableCodeObject
qrCodeFrameView?.frame = barCodeObject.bounds;
if metadataObj.stringValue != nil {
messageLabel.text = metadataObj.stringValue
}
}
}
被解雇了,像这样在函数内部做一个performSegueWithIdentifier(_ identifier: String?, sender sender: AnyObject?)
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
// Check if the metadataObjects array is not nil and it contains at least one object.
if metadataObjects == nil || metadataObjects.count == 0 {
qrCodeFrameView?.frame = CGRectZero
messageLabel.text = "No QR code is detected"
return
}
// Get the metadata object.
let metadataObj = metadataObjects[0] as AVMetadataMachineReadableCodeObject
if metadataObj.type == AVMetadataObjectTypeQRCode {
// If the found metadata is equal to the QR code metadata then update the status label's text and set the bounds
let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj as AVMetadataMachineReadableCodeObject) as AVMetadataMachineReadableCodeObject
qrCodeFrameView?.frame = barCodeObject.bounds;
if metadataObj.stringValue != nil {
messageLabel.text = metadataObj.stringValue
}
}
**performSegueWithIdentifier(_ identifier: String?, sender sender: AnyObject?)**
}
并像
一样传入 segue 的标识符Identifier: thetransition
未经测试的代码,但有逻辑:)
是的,这是可能的。
但我们只能给你一个笼统的答案,因为有许多不同的方法和库可以读取二维码。但举个小例子,您可以使用 this tutorial 中的 QR 码 reader。
如果您使用本教程中提供的代码读取 QR 码,将调用一个方法来接收 QR 码的数据。在教程中它是 captureOutput
.
然后在此方法中,如果调用该方法,您可以添加代码以执行 segue。