如何将UITextField添加到SKScene(SpriteKit游戏)

时间:2018-02-21 01:14:16

标签: swift sprite-kit

我无休止地寻找解决方案。已经打开的许多问题要么没有答案,要么解释得很模糊。

我正在尝试向我的SKScene添加UITextField,因为玩家需要能够为此游戏创建一个帐户。

var txtField:UITextField!

这里我声明了文本字段。

txtField = UITextField(frame: CGRect(x: frame.midX, y: frame.midY, width: 200, height: 30));
view.addSubview(txtField!)

有了这两行,我试图将文本字段添加为子视图。当我运行应用程序时,文本字段不可见。我在这做错了什么?我是否需要更改此子视图的zPosition?

真的很感激一些帮助! :)

2 个答案:

答案 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

结果是:

enter image description here

答案 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。