如何在视图中居中节点数组?

How do I center array of nodes in view?

我通过编程绘制等距图块创建了一个游戏板,然后将它们添加到一个数组中。节点已被任意放置,以尽可能多地在中心显示游戏板。当然,这在不同设备上 运行 时不起作用。所以,我正在寻找一种方法,让游戏板始终位于屏幕的绝对中心。

我有一个关于将节点合并成一个大...节点的想法?然后将其中心设置为视图的中心。那可行吗?如何?或者有更好或更简单的方法吗?

这就是我创建磁贴的方式:

func newTile(size:CGSize) -> SKShapeNode {
    let shape = SKShapeNode()
    let path = UIBezierPath()
    path.move(to: CGPoint(x:0, y:size.height / 2.0))
    path.addLine(to: CGPoint(x:size.width / 2.0, y:0))
    path.addLine(to: CGPoint(x:0, y:-size.height / 2.0))
    path.addLine(to: CGPoint(x:-size.width / 2.0, y:0))
    path.close()

    shape.path = path.cgPath
    shape.lineWidth = 1.0
    shape.fillColor = SKColor.gray

    return shape
}

放置方块的函数:

func tilePosition(col:Int, row:Int) -> CGPoint {
    let x = (CGFloat(row) * tileWidth  / 2.0) + (CGFloat(col) * tileWidth  / 2.0)
    let y = (CGFloat(col) * tileHeight / 2.0) - (CGFloat(row) * tileHeight / 2.0)
    return CGPoint(x: x-250, y: y)
}

... 并添加到看板(为了简化,我删除了此处的代码。这只是为了给您一个想法):

func createGameBoard(sceneView: SKScene) -> [[SKShapeNode]] {
    let size = CGSize(width: tileWidth, height: tileHeight)

    for row in 1...numRows {
        var colArray = [SKShapeNode]()


        for col in 1...numCols {
            let tile = newTile(size: size)
            tile.position = tilePosition(col: col, row: row)

            sceneView.addChild(tile)
            colArray.append(tile)
        }
            gameBoardArray.append(colArray)
    }
    return gameBoardArray
}

那么,如何将这个东西放在视图中间呢?也就是说,中心图块位于屏幕中央,所有其他图块相应地围绕它对齐。

可能有上千种不同的方法来解决您的问题,这里只是一个快速简单的解决方案(另一种选择是使容器成为 SKSpriteNode 并将其锚点设置为零)。

func arrangeButtonsInGrid(padding: Int) {

    var yPosition = -(rows / 2)

    for row in 0..<rows {

        var xPosition = -(columns / 2)

        for col in 0..<columns {
            tiles[col, row].position = CGPoint(x: padding * xPosition, y: padding * yPosition)
            xPosition += 1
        }

        yPosition += 1
    }
}