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

时间:2016-10-20 16:50:27

标签: ios swift sprite-kit

我试图显示从另一个类发送的消息。我正在使用一个函数来执行此操作。但问题是当我更改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)
}

(这些是2个不同的文件和ViewControllers)

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

I think here there is a little confusion between UIKit and SpriteKit.

A ViewController has no member addChild, I think you would speak about SKNode object.

In SpriteKit , if you want to display a SKNode element or an objects that inherit SKNode, first of all you should cast your view as a SKView then instantiate and present a SKScene as explained for example in the "Hello world" project :

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")
    } 
}

Also, in SpriteKit you don't need to change viewController to display your elements, you can present a new SKScene or show directly a SKNode


To help you about your function you can do also:

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
}

Usage:

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)

答案 1 :(得分:0)

将新vc存储在属性中并推送/显示

self.startVC = StartViewController()
self.navigationController?.pushViewController(self.startVC, animated: true)

当您想要显示消息时,只需调用showMessage() func

self.startVC.showMessage()