【问题标题】:Use of unresolved identifier 'scene'使用未解析的标识符“场景”
【发布时间】:2017-06-02 10:42:49
【问题描述】:

我正在尝试在找到“条形码”时以编程方式更改场景,但我不断收到错误...

进口模块:

import UIKit
import AVFoundation
import SpriteKit
import SceneKit

代码:

        if metadataObj.stringValue != nil {
            messageLabel.text = "Found: " + metadataObj.stringValue
            myBarcode = metadataObj.stringValue

            let transition = SKTransition.reveal(with: .down, duration: 1.0)

            let nextScene = WebLogger(size: scene!.size) *<-- use of unresolved identifier 'scene'
            nextScene.scaleMode = .AspectFill

            scene?.view?.presentScene(nextScene, transition: transition) *<-- use of unresolved identifier 'scene'
        }

通过添加修复问题 1

var scene = SKScene()

问题 2 调用中的参数标签不正确(具有“大小:”,预期为“编码器:”)

var scene = SKScene()

        if metadataObj.stringValue != nil {
            messageLabel.text = "Found: " + metadataObj.stringValue
            myBarcode = metadataObj.stringValue

            let transition = SKTransition.reveal(with: .down, duration: 1.0)

            let nextScene = WebLogger(size: scene!.size) *<-- Incorrect argument label in call (have 'size:', expected 'coder:')
            nextScene.scaleMode = .AspectFill

            scene?.view?.presentScene(nextScene, transition: transition)
        }

【问题讨论】:

  • 好的,scene 在哪里定义?您能否向我们展示更多代码,以帮助我们了解上下文。例如,您在此处向我们展示的代码是来自某种ViewController 还是来自Scene 本身?
  • @pbodsk 来自视图控制器。这是它的完整脚本:pastebin.com/gzaXhJF9,这是视图:imgur.com/a/gAM0b
  • 您介意将其发布到您的问题中吗...以便我们将其放在一个地方?
  • 在您链接到的代码中,我可以看到对scene 的引用的唯一地方是编译器抱怨的地方。所以这就是为什么它至少抱怨......它不知道scene 是什么,因为你之前没有声明过它:)
  • 好的,我使用 'var scene = SKScene()' 声明它,但现在它显示'Incorrect argument laben in call (have 'size:', expected 'coder:')

标签: swift sprite-kit uikit scene


【解决方案1】:

好的。我认为您可能不得不从当前的设置中回溯一点。

您应该搜索教程的关键字/关键技术是:

  • 故事板:这是您定义/设计应用流程的地方,您似乎已经拥有了。
  • UIViewController:在情节提要中,您可以定义各种视图控制器,在您的应用程序中使用它们来表示UIViewControllers
  • segue:segue 是您在故事板中的UIViewControllers 之间导航的方式。例如,您可以连接转场,以便在您点击按钮时自动发生转场,或者您可以从代码中手动调用转场(这可能是您想要的)。

一个简单的例子。

我创建了一个包含两个 UIViewControllers(FirstViewController 和 SecondViewController)的项目。

如您所见,我在它们之间添加了UIStoryboardSegue。为此,您按住 ctrl,然后从第一个 UIViewController 上方的黄色框(如下图所示)拖动到第二个 UIViewController 的任意位置,然后选择您的演示风格。

记得给你的 segue 一个标识符,我们马上就需要它。为此,请选择 segue 并查看屏幕右侧。

最后一步是调用 segue。我在我的 FirstViewController 中的按钮上添加了一个 IBAction,如下所示:

@IBAction func navigateToPageTwo(_ sender: UIButton) {
   performSegue(withIdentifier: "mySegue", sender: nil)
}

(见...我告诉过你标识符很重要;))。

如果您这样做,那么您应该能够从一个UIViewController 导航到另一个。

在您的情况下,您应该在您的 QRScannerController 和您的 WebLogger 之间添加一个 segue,然后执行以下操作:

if metadataObj.stringValue != nil {
    messageLabel.text = "Found: " + metadataObj.stringValue
    myBarcode = metadataObj.stringValue

    performSegue(withIdentifier: "nameOfYourSegue", sender: nil)
}

如果您需要在两个UIViewControllers 之间传递数据,您应该查看prepare(for segue: UIStoryboardSegue, sender: Any?) 方法(例如查看this question and answer

希望能给你一些工作。

【讨论】:

  • 好的,我添加了代码并命名了情节提要.. 但是现在条形码扫描仪没有找到任何东西,所以我无法真正测试它:/ 编辑:如果我取消注释 performSegue 扫描仪工作但它不会做任何事:(
  • 好的。你有没有添加一个 segue 并给它一个与你调用它时使用的名称相匹配的名称?
  • 没关系 :D 我在一个新场景中查看了您的答案并让它工作,然后了解如何将它放入另一个场景!完全按照我的意愿工作!谢谢!!
  • @MichaelDavison 太棒了!我承认当你开始做导航、segues、故事板和所有这些时它可能会很复杂,但是当你知道要搜索和要求什么时,你很快就会掌握它的窍门:) 祝你好运
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2016-07-17
  • 2016-04-29
相关资源
最近更新 更多