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