无法在Swift中的场景中心放置标签

无法在Swift中的场景中心放置标签,swift,Swift,我试图在场景的正中心放置一个UILabel。我通过获取中心值,然后使用convertPointToView函数,然后减去宽度,结果不在中心。如果有人能告诉我为什么我所做的是错误的,或者甚至能帮我改正,我将非常感激。结果如下:() 导入SpriteKit 类游戏场景:SKScene{ var testSprite:SKSpriteNode=SKSpriteNode(图像名为:“太空船”) var testLabel:UILabel=UILabel() func defineTestLabel(变量

我试图在场景的正中心放置一个UILabel。我通过获取中心值,然后使用convertPointToView函数,然后减去宽度,结果不在中心。如果有人能告诉我为什么我所做的是错误的,或者甚至能帮我改正,我将非常感激。结果如下:()

导入SpriteKit
类游戏场景:SKScene{
var testSprite:SKSpriteNode=SKSpriteNode(图像名为:“太空船”)
var testLabel:UILabel=UILabel()
func defineTestLabel(变量#标签:UILabel)->UILabel{
var labelXPos:Int=Int()
labelXPos=Int(convertPointToView(CGPoint(x:(self.size.width/2)-50,y:0)).x)
label=UILabel(帧:CGRect(x:labelXPos,y:100,宽度:100,高度:100))
label.text=“测试”
label.textAlignment=NSTextAlignment.Center
label.layer.borderColor=UIColor.blackColor().CGColor
label.layer.borderWidth=5
退货标签
}
覆盖func didMoveToView(视图:SKView){
self.view?.addSubview(defineTestLabel(标签:self.testLabel))
}
覆盖func touchesBegined(触摸:设置,withEvent事件:UIEvent){
/*当触摸开始时调用*/
用于触摸输入(触摸设置为){
let location=touch.locationInNode(自)
}
}
覆盖函数更新(currentTime:CFTimeInterval){
/*在渲染每个帧之前调用*/
}
}

您可以使用场景midX减去标签宽度的一半。

如果是,@LeoDabus很可能是重复的,(view.scene!.frame.size/2)-75也不是中心,那么如何在屏幕中央放置UILabel?@LeoDabus抱歉,我不明白,您能在回答中详细说明吗?view.scene!。frame.midxy您可能需要减去标签宽度的一半
import SpriteKit

class GameScene: SKScene {

var testSprite: SKSpriteNode = SKSpriteNode(imageNamed: "Spaceship")
var testLabel: UILabel = UILabel()

func defineTestLabel(var #label: UILabel) -> UILabel {
    var labelXPos: Int = Int()

    labelXPos = Int(convertPointToView(CGPoint(x: (self.size.width / 2)  - 50, y: 0)).x)
    label = UILabel(frame: CGRect(x: labelXPos, y: 100, width: 100, height: 100))
    label.text = "Test"
    label.textAlignment = NSTextAlignment.Center
    label.layer.borderColor = UIColor.blackColor().CGColor
    label.layer.borderWidth = 5
    return label
}

override func didMoveToView(view: SKView) {
    self.view?.addSubview(defineTestLabel(label:self.testLabel))
}

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch in (touches as! Set<UITouch>) {
        let location = touch.locationInNode(self)
    }
}

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
}
}