Ios 使用函数更新其他类中的标签
我试图显示从另一个类发送的消息。我用一个函数来做这个。但问题是,当我更改ViewController时,消息不会显示 设置消息:Ios 使用函数更新其他类中的标签,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我试图显示从另一个类发送的消息。我用一个函数来做这个。但问题是,当我更改ViewController时,消息不会显示 设置消息: StartViewController().showMessage(message: "Test Message", color: UIColor.green) func showMessage(message: String, color: UIColor){ messageLabel = SKLabelNode(fontNamed: "Verdana"
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)
}
显示消息:
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)
}
(这是两个不同的文件和视图控制器)
谢谢你的帮助 将新vc存储在属性中并推送/呈现它
self.startVC = StartViewController()
self.navigationController?.pushViewController(self.startVC, animated: true)
当您想显示消息时,只需调用showMessage()
func
self.startVC.showMessage()
我认为在这里,UIKit和SpriteKit之间有点混淆
ViewController
没有成员addChild
,我想您应该谈谈SKNode
对象
在SpriteKit中,如果要显示SKNode
元素或继承SKNode
的对象,首先应将视图强制转换为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)
StartViewController()
正在初始化一个新的StartViewController
,然后调用该方法。您需要参考当前的StartViewController
@Caleb谢谢您的回答!我可以问你怎么做吗?我在谷歌上找不到关于这个的教程。@stefffeyens嗨,steff,你可以在XCode 8-File-New-project(tab应用程序)中找到一个有用的项目,然后选择Game。这里有一个带有“Hello world”标签的SpriteKit演示。希望它能帮助你。