如何将anchorPoint of view设置为0.5,0.5以在屏幕中心获取视图? (不是场景)

时间:2019-01-02 10:08:41

标签: ios swift sprite-kit

我想使我的游戏全屏显示,而不是在两侧和底部都带有黑条。因此我为此找到了这段代码,它适用于场景,现在可以全屏显示,但是资产放置不正确。由于视图的坐标不同(不知道为什么会因为以前的原因而尝试为safeAreaLayoutGuide设置所有坐标,但后来得到黑条)。因此,有什么办法可以将其设置回0.5 0.5。否则,我将不得不将场景的anchorPoint退回到视图的anchorPoint,并根据此设置我的sks文件中的所有资产。

这是GameViewController中的代码:

class GameViewController: UIViewController {

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()

        if let view = self.view as! SKView? {
            view.ignoresSiblingOrder = true
            view.showsFPS = true
            view.showsNodeCount = true

            let scene = HomeScene(size: view.bounds.size)
            scene.scaleMode = .aspectFill
            view.presentScene(scene)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        print("---")
        print("∙ \(type(of: self))")
        print("---")
    }
}

来自HomeScene的代码:

let rectangle1 = SKShapeNode(rect: (self.view?.bounds)!)
rectangle1.strokeColor = .white
rectangle1.lineWidth = 20
addChild(rectangle1)

// Set (0, 0) as the centre of the screen
scene?.anchorPoint = CGPoint(x: 0.5, y: 0.5)

let rectangle = SKShapeNode(rect: self.frame)
rectangle.strokeColor = .green
rectangle.lineWidth = 20
addChild(rectangle)

这就是场景在0.5、0.5处的外观,但是视图高于该视图,绿色是场景,白色是视图,视图中间是按钮:

enter image description here

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用其他锚点来解决问题,或者可以将白色“视图”节点在场景中的位置不同。

有关坐标系(和锚点)的信息:apple documentation

根据文档,默认锚位置为(0.5,0.5)。将白色视图置于左下角:将x和y的宽度和高度减半。请注意,线宽也会影响定位。将白色视图置于左下方:

let bottomLeft: CGPoint = CGPoint(x: -self.size.width/2 + rectangle1.lineWidth/2,
                                  y: -self.size.height/2 + rectangle1.lineWidth/2)
rectangle1.position = bottomLeft

要使白色视图在绿色视图中居中,请减去矩形1的宽度和高度(再次注意线宽)

let center: CGPoint = CGPoint(x: -rectangle1.frame.size.width/2 + rectangle1.lineWidth/2,
                              y: -rectangle1.frame.size.height/2 + rectangle1.lineWidth/2)
rectangle1.position = center

请注意,您的绿色视图位于白色视图上方。将白色视图的z位置设置为某个正数,以将其排列在绿色视图上方

rectangle1.zPosition = 1

答案 1 :(得分:0)

如果要从.sks文件加载HomeScene,则xcode将anchorPoint设置为(0.5,0.5),如图所示。

enter image description here

但是,当您尝试创建自定义类而不从文件(.sks)加载它时,将没有像此处那样设置属性。因此,您需要手动设置。

let scene = HomeScene(size: view.bounds.size) 
// at this point, you HomeScene has the anchorPoint set to (0.0, 0.0)

// lets set it back to (0.5, 0.5) as we want
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
scene.scaleMode = .aspectFill
view.presentScene(scene)