iosswiftsprite-kitcore-locationcgpoint

how to set anchorPoint of view to 0.5 , 0.5 to get view in centre of screen? (Not scene)


I want to make my game full screen not with the black bars on both sides and bottom. so I found this code for that and it works for scene and now it's on full screen but the assets are not correctly positioned. Because of the view's coordinates are different (don't know why maybe because of previously I tried to set all for safeAreaLayoutGuide but then I get black bars). So is there any way to set it back to 0.5 0.5 . Otherwise I will have to set back anchorPoint of scene to what ever is view's anchorPoint and set all assets in my sks file according to that.

Here is the code from 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("---")
    }
}

this code from 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)

This is how it looks the scene is at 0.5, 0.5 but, view is above that green is scene and white is view and button in middle of the view :

enter image description here

Thank you.


Solution

  • You could fix the problem with a different anchorpoint, or you could position the white 'view' node differently in the scene.

    Information about the coordinate system (and anchor points): apple documentation

    The default anchor position is (0.5, 0.5) according to the documentation. To put the white view in the bottom left: subtract half of the width and height of the x and y. Note that the line width also affects the positioning. Position the white view to the bottom left:

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

    To center the white view in the green view, subtract the width and height of rectangle1 (again, note the line width)

    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
    

    Note that your green view is above the white view. Set the z position of the white view to some positive number to arrange it above the green view

    rectangle1.zPosition = 1