SSH This SSH This - 3 months ago 29
Swift Question

Odd Positioning of SKLabelNode

I am trying to add a SKLabelNode to the top left of my scene. Currently I am achieving this using a value of "300"

func addMoneyLabel() {
let moneyLabel = SKLabelNode(fontNamed:"Copperplate")
moneyLabel.fontSize = 25
print("CGRectGetMidX(self.frame),", CGRectGetMidX(self.frame))
print("CGRectGetMinX(self.frame),", CGRectGetMinX(self.frame))
moneyLabel.position = CGPoint(
x:300,
y:CGRectGetMaxY(self.frame)
)
moneyLabel.text = "$500"
moneyLabel.verticalAlignmentMode = SKLabelVerticalAlignmentMode.Top
moneyLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left
self.addChild(moneyLabel)
}


This produces an image that looks like this:

enter image description here

Why isn't "0" or "CGRectGetMinX(self.frame)" the correct value for positioning top left?

Answer

Because the scene size is not necessarily the same as view's size. By default, scene size is 1024x768. As I can see, you are using iPhone 6s+ which has different proportion and different dimension in compare to default scene's size.

To debug this, put a break point, or just print scene.size and scene.view.size.

You can make a scene to have the same size of a view, if you set this in your view controller:

scene.size = view.bounds.size

Now, when you set x position to 0 (and set y to CGRectGetMaxY), the label will be placed in top left corner.