Sistema de coordenadas en SpriteKit

Estoy bastante confundido con el sistema de coordenadas spritekit. Necesito aclaraciones sobre dos casos.

Caso 1:

Cuando se agrega un nodo sprite como hijo a la escena:

SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
blueBall.name=@"blueball";
blueBall.size=CGSizeMake(75, 75);
blueBall.position=point; //I am varying this point
[self addChild:blueBall];

He agregado el nodo en diferentes puntos cada vez. Estos son los puntos en los que agregué el nodo:(100x100)(200x200)(300x300)(400x400)(900,600)

Y en mi dispositivo iPhone 5, se ven así:

Si observa 100x100, cuando agrego el sprite en el punto (100,100), en el dispositivo, cuando registro la posición del nodo, me mostró (99.9,138.17) que es una gran diferencia en comparación con el punto (100,100).

Aunque también hay cambios en los otros puntos, los descuido ya que la diferencia es demasiado pequeña para otros puntos.

-(void)didMoveToView:(SKView *)view {
    /* Setup your scene here */
      [self bounceTheBlueBallAtPoint:CGPointMake(100, 100)];

}

    -(void)bounceTheBlueBallAtPoint:(CGPoint)point{


    SKSpriteNode * blueBall = [SKSpriteNode spriteNodeWithImageNamed:@"hRedBall.png"];
    blueBall.name=@"blueball";
    blueBall.size=CGSizeMake(75, 75);

    blueBall.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:blueBall.frame.size.width/2];


    blueBall.physicsBody.categoryBitMask=blueBallHitCategory;
    blueBall.physicsBody.collisionBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;
    blueBall.physicsBody.contactTestBitMask=blueBallHitCategory|pinkBallHitCategory|wallHitCategory;

    blueBall.physicsBody.dynamic=YES;
    blueBall.physicsBody.affectedByGravity=NO;
    blueBall.physicsBody.restitution=1.0;
    blueBall.physicsBody.friction=0.0;
    blueBall.physicsBody.linearDamping=0.0;
    blueBall.physicsBody.angularDamping=0.0;

    blueBall.position=point;

    [self addChild:blueBall];


    //applying impulse to bounce off
//    CGVector impulse = CGVectorMake(30.0,60.0);
//    [blueBall.physicsBody applyImpulse:impulse];
//    

}

Estoy comprobando la posición de la pelota en este método:

      -(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */

    [self checkSpriteMovement];

   }

    -(void)checkSpriteMovement{

    [self enumerateChildNodesWithName:@"blueball" usingBlock:^(SKNode * _Nonnull node, BOOL * _Nonnull stop) {

        SKSpriteNode *ball=(SKSpriteNode *)node;

        if (ball.physicsBody.resting) {

            NSLog(@"The ball position is %@",NSStringFromCGPoint(ball.position));
        }

    }];

}

Caso 2:

Digamos que tengo un nodo sprite de fondo, y agrego el nodo de bola a este nodo de fondo en lugar de agregar el nodo de bola a la escena.

 _background = [SKSpriteNode spriteNodeWithImageNamed:@"parkImage.jpg"];
_background.size = self.frame.size; //frame size is (1024x768)
_background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:_background];

y luego agrego el nodo de bola a este fondo:

[_background addChild:blueBall];

Este es el nodo de fondo agregado:

Ahora intenté agregar bola al fondo agregado:

En el punto: (100,100):

En el punto: (- 280, -150)

También me gustaría discutir el tercer caso:

Caso 3:

Quiero otro nodo para ejecutar el fondo llamado anillo. Y luego quiero agregar pelota al fondo. Entonces habrá 2 nodos secundarios.

   _ringNode=[SKSpriteNode spriteNodeWithImageNamed:@"hue_ring.png"];
_ringNode.size=CGSizeMake(80, 80);
_ringNode.position=CGPointMake(0, 0);  //center point of background in this case
_ringNode.anchorPoint=CGPointMake(0.5,0.5);
_ringNode.name=kRingNodeName;
[_background addChild:_ringNode];

entonces el anillo estará aquí:

Y ahora quiero agregar el nodo de bola al nodo de fondo:

Usé el mismo código para agregar la bola en el punto (-280, -150):

¿Por qué hay un cambio en el sistema de coordenadas de los nodos de escena y sprite?

Otro problema que estoy enfrentando es:

Los nodos no se agregan a la escena correctamente. A pesar de que la escena se inicia, los nodos no son visibles para el usuario, pero puedo ver el conteo de nodos que dice que hay nodos en la pantalla. Necesito ejecutar el código nuevamente para ver los nodos agregados correctamente a la escena. Esto está sucediendo una vez cada 4 veces. Solo necesito detener el código y ejecutarlo nuevamente para ver las bolas en la pantalla, de lo contrario, solo veo el fondo sin ninguna bola, aunque las estoy agregando al fondo.

¿Por qué está pasando esto?

Estoy agregando todos los nodos endidMoveToView

Respuestas a la pregunta(2)

Su respuesta a la pregunta