我正在尝试显示从另一个类(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)
感谢您的帮助!
最佳答案
我认为 UIKit 和 SpriteKit 之间存在一些混淆。
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/