Swift - 带SpriteNodes和UILabel的{NSLayout表

时间:2016-03-17 00:33:21

标签: iphone xcode swift uilabel nslayoutconstraint

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

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

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

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

所以现在我已经在iPhone 5上进行了测试..例如:它看起来如何: 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)

是否有可能使Constraints更加灵活,以便它对每一部iPhone看起来都很好?

1 个答案:

答案 0 :(得分:1)

是的,最近苹果让这比以前更容易。 如果您在故事板中,可以将标签从标签拖到其他标签或背景本身。您可以静态地隔离对象,或动态分组并均匀分隔它们。当你将滚动到背景拖动到滚动视图的侧面时,这就是它的样子: enter image description here 和另一个对象(在这种情况下,一个按钮): enter image description here

您可以使用右下方的小按钮对您的定位进行特定调整: enter image description here

如果您希望以编程方式而不是通过故事板进行操作,那么您可以在“视图控制器场景”中找到变量名称以编辑这些约束。故事板中的侧滚动条。只需在故事板中做一些你想要做的事情(你可以事后删除),你就会看到它们的变量名: enter image description here