Swift - 带有 SpriteNodes 和 UILabel 的 NSLayout 表

Posted

技术标签:

【中文标题】Swift - 带有 SpriteNodes 和 UILabel 的 NSLayout 表【英文标题】:Swift - NSLayout Table with SpriteNodes and UILabel 【发布时间】:2016-03-17 00:33:21 【问题描述】:

我仍在使用 Xcode 和 Swift 开发我的第一款 iPhone 游戏。

游戏运行良好,所以我想我可以为游戏添加一些功能。其中之一是玩家可以看到他的统计数据的场景。

所以我为场景 (SKSpriteNodes) 创建了一个背景,并在场景中添加了一些 UILabels

对于 iPhone 6 Plus,第一个 UILabel 位于正确的位置 (using NSLayout)

所以现在我已经在 iPhone 5 上对其进行了测试,例如 .. 它的样子:

到目前为止我的代码..

func StatsLabelsAnzeigen()
    StatHoechsteScoreLabel.textColor = SKColor.darkGrayColor()
    StatHoechsteScoreLabel.textAlignment = NSTextAlignment.Center
    StatHoechsteScoreLabel.font = UIFont.systemFontOfSize(16)
    StatHoechsteScoreLabel.alpha = 1
    StatHoechsteScoreLabel.translatesAutoresizingMaskIntoConstraints = false
    StatHoechsteScoreLabel.text = "\(HoechsteScore)" // (Int)

    self.view?.addSubview(StatHoechsteScoreLabel)

    // Create Constraints
    let RechtsbuendigStatHoechsteScoreLabel:NSLayoutConstraint = NSLayoutConstraint(item: self.view!, attribute: NSLayoutAttribute.TrailingMargin, relatedBy: NSLayoutRelation.Equal, toItem: StatHoechsteScoreLabel, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: 10)
    let ObenbuendigStatHoechsteScoreLabel:NSLayoutConstraint = NSLayoutConstraint(item: StatHoechsteScoreLabel, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 168)
    let heightStatHoechsteScoreLabel = NSLayoutConstraint.constraintsWithVisualFormat("V:[StatHoechsteScoreLabel(40)]", options: [], metrics: nil, views: ["StatHoechsteScoreLabel" : StatHoechsteScoreLabel])
    let widthStatHoechsteScoreLabel = NSLayoutConstraint.constraintsWithVisualFormat("H:[StatHoechsteScoreLabel(200)]", options: [], metrics: nil, views: ["StatHoechsteScoreLabel" : StatHoechsteScoreLabel])

    // Add the created Constraints
    StatHoechsteScoreLabel.addConstraints(heightStatHoechsteScoreLabel)
    StatHoechsteScoreLabel.addConstraints(widthStatHoechsteScoreLabel)
    self.view?.addConstraint(RechtsbuendigStatHoechsteScoreLabel)
    self.view?.addConstraint(ObenbuendigStatHoechsteScoreLabel)

我的统计数据背景:

    StatsSceneBGNode = SKSpriteNode(imageNamed: "StatsBG2")
    StatsSceneBGNode.size = CGSize(width: view.frame.size.width*80/100, height: view.frame.size.height*80/100)
    StatsSceneBGNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2)
    StatsSceneBGNode.zPosition = 2
    StatsSceneBGNode.name = "StatsSceneBGNode"
    addChild(StatsSceneBGNode)

是否有可能使约束更加灵活,使其看起来适合每部 iPhone?

【问题讨论】:

【参考方案1】:

是的,最近苹果比以前更容易做到这一点。 如果您在故事板中,您可以从标签中cntl-拖动到其他标签或背景本身。您可以静态地间隔对象,或动态地分组和均匀地间隔它们。这是当您 cntl 拖动到滚动视图一侧的背景时的样子: 和另一个对象(在本例中为按钮):

您可以使用右下角的小按钮对您的定位进行特定调整:

如果您希望以编程方式而不是通过情节提要执行此操作,则可以在情节提要的“视图控制器场景”侧滚动条中找到变量名称来编辑此类约束。只需举几个例子说明你想在故事板中做什么(你可以在之后删除),你会看到它们的变量名:

【讨论】:

谢谢我的朋友。它就像描述的那样工作:-) 当然可以,很高兴我能帮上忙

以上是关于Swift - 带有 SpriteNodes 和 UILabel 的 NSLayout 表的主要内容,如果未能解决你的问题,请参考以下文章

带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire

Swift、SpriteKit 和带有 CGPoint 的多维数组

带有可变参数的 Swift 和 C 回调

没有带有 cocoapods 和 swift 的模块“RestKit”

带有 Swift 超慢输入和自动完成功能的 Xcode 6

Swift:插入带有文本输入的警报框(和存储文本输入)