ios - 使用函数更新其他类中的标签

标签 ios swift sprite-kit

我正在尝试显示从另一个类(class)发送的消息。我正在使用一个函数来做到这一点。但问题是,当我更改 ViewController 时,消息没有显示。

设置消息:

StartViewController().showMessage(message: "Test Message", color: UIColor.green)

显示消息:

func showMessage(message: String, color: UIColor){

    messageLabel = SKLabelNode(fontNamed: "Verdana")
    messageLabel.text = message
    messageLabel.fontSize = 15
    messageLabel.fontColor = color
    messageLabel.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)

    self.addChild(messageLabel)
}

(这是两个不同的文件和 ViewController)

感谢您的帮助!

最佳答案

我认为 UIKitSpriteKit 之间存在一些混淆。

ViewController 没有成员 addChild,我想你会谈论 SKNode 对象。

SpriteKit中,如果你想显示一个SKNode元素或者一个继承SKNode的对象,首先你应该转换你的 View 作为 SKView,然后实例化并呈现 SKScene,如 “Hello world” 项目中的示例所示:

class GameViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if let view = self.view as! SKView? {
            // Load the SKScene from 'GameScene.sks'
            if let scene = SKScene(fileNamed: "GameScene") {
                // Set the scale mode to scale to fit the window
                scene.scaleMode = .aspectFill
                // Present the scene
                view.presentScene(scene)
            }
            view.ignoresSiblingOrder = true
            view.showsFPS = true
            view.showsNodeCount = true
        }
    }
}
class GameScene: SKScene {
    override func didMove(to view: SKView) {
        print("This is my GameScene, here I could show my SKLabelNode")
    } 
}

此外,在 SpriteKit 中,您不需要更改 viewController 来显示您的元素,您可以呈现一个新的 SKScene 或直接显示一个 SKNode


为了帮助您了解您的功能,您还可以:

func showMessage(message: String, color: UIColor,pos:CGPoint)->SKLabelNode{
        let messageLabel = SKLabelNode(fontNamed: "Verdana")
        messageLabel.text = message
        messageLabel.fontSize = 15
        messageLabel.fontColor = color
        return messageLabel
}

用法:

let messagePos = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
let messageLabel = showMessage(message:"Test Message", color: UIColor.green, pos:messagePos)
self.addChild(messageLabel)

关于ios - 使用函数更新其他类中的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160160/

相关文章:

ios - iOS删除内存中的应用程序(在后台)的顺序是什么?

swift - View Controller 不更新

swift - 在 Swift 中使用 SKAction.animateWithTextures 开始和结束动画

javascript - AngularJS 自定义过滤器不适用于 iOS 和 IE

ios - 刷新 3D Touch Quick Action 标题

css - iPad Safari 滚动会导致 HTML 元素消失并延迟重新出现

swift - Rx swift : manage object updates in the app

ios - 协议(protocol)委托(delegate)方法和 block 之间的连接区别

Swift:覆盖方法具有不兼容的类型

ios - 将 iOS 更新到 7.1 后,Sprite-kit 游戏崩溃