我无休止地寻找解决方案。已经打开的许多问题要么没有答案,要么解释得很模糊。
我正在尝试向我的SKScene添加UITextField,因为玩家需要能够为此游戏创建一个帐户。
var txtField:UITextField!
这里我声明了文本字段。
txtField = UITextField(frame: CGRect(x: frame.midX, y: frame.midY, width: 200, height: 30));
view.addSubview(txtField!)
有了这两行,我试图将文本字段添加为子视图。当我运行应用程序时,文本字段不可见。我在这做错了什么?我是否需要更改此子视图的zPosition?
真的很感激一些帮助! :)
答案 0 :(得分:2)
如果您想在场景中添加UITextField
,请务必使用可见addSubview
来致电SKView
,您可以查看以下代码:
import SpriteKit
import PlaygroundSupport
let sceneFrame = CGRect(origin: .zero, size: CGSize(width: 200, height: 200))
var scene = SKScene(size: sceneFrame.size)
scene.backgroundColor = UIColor.lightGray
let textFieldFrame = CGRect(origin: .zero, size: CGSize(width: 200, height: 30))
let textField = UITextField(frame: textFieldFrame)
textField.backgroundColor = UIColor.white
textField.placeholder = "hello world"
let skView = SKView(frame: sceneFrame)
skView.addSubview(textField)
skView.presentScene(scene)
PlaygroundPage.current.liveView = skView
结果是:
答案 1 :(得分:0)
我最近想出了两个可以为将来提供帮助的功能。
func createTextField (at: CGPoint, size: CGSize, isSecure: Bool = false) -> NSTextField {
var newSize = size
newSize.width *= (self.view?.frame.width)! / self.frame.width
newSize.height *= (self.view?.frame.height)! / self.frame.height
var pos = convertPoint(toView: at)
pos.x -= (newSize.width / 2)
pos.y -= (newSize.height / 2)
return !isSecure ? NSTextField (frame: NSRect (x: pos.x, y: pos.y, width: newSize.width, height: newSize.height)) : NSSecureTextField (frame: NSRect (x: pos.x, y: pos.y, width: newSize.width, height: newSize.height))
}
func createTextField (spriteNamed: String, isSecure: Bool = false) -> NSTextField {
let node = self.childNode(withName: spriteNamed) as! SKSpriteNode
let pos = convert(node.position, from: node.parent!)
node.removeFromParent()
return createTextField(at: pos, size: node.size, isSecure: isSecure)
}
这些函数允许您将普通的SKSpriteNode添加到场景中,并将它们替换为NSTextFields。