2016-12-15 7 views
2

In meiner FunktionVerwirrende umgekehrt Berührungsereignis in Swift

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){ 
    for touch in touches{ 
     let touchLocation = touch.location(in: self.view) 
     print("X: \(touchLocation.x) Y: \(touchLocation.y)") 
    } 
} 

I Y-Wert umgekehrt gehen. Wenn ich oben klicke, bekomme ich einen Wert von ~ 0 und wenn ich unten klicke, bekomme ich einen hohen Wert. Dadurch bewegt sich mein Sprite in die falsche Y-Richtung.

Wenn ich jedoch ".view" in self.view entfernen, funktioniert es wie es sollte. Weiß jemand, warum es umgekehrt ist, wenn ich self.view benutze?

+0

Was ist die Art von 'Selbst'? – dan

+0

@dan Es ist ein SKView ... – Whirlwind

+3

Und dies geschieht wegen eines Unterschieds zwischen UIKits und SpriteKits Koordinatensystem. UIKit hat 0,0 in der oberen linken Ecke. Wie OP bereits herausgefunden hat, würde die Verwendung von self (was eine Szene ist) wie erwartet funktionieren. – Whirlwind

Antwort

3

Wie Whirlwind im Kommentar unten Ihre Frage erklärt, geschah dies, weil mit self Sie zeigen SKScene (SpriteKit) und mit self.view Sie verwenden SKView (UIView Unterklasse so UIKit System):

UIKit Koordinatensystem für iOS hat seinen Ursprung in der oberen linken Ecke der Zeichenfläche, und positive Werte erstrecken sich nach unten und rechts davon.

SpriteKit Koordinatensystem verwendet das gleiche System sowohl auf IOS X und OS koordinieren, hat den Ursprung (0,0) in der linken unteren Ecke, und die (1334,750) in der Koordinaten obere rechte Ecke.

+1

SpriteKit hat die Standardgröße von sks Dateien geändert, es ist nicht länger 1024.768 es ist jetzt 750,1334 – Knight0fDragon

+1

@ Knight0fDragon Danke Herr, ich weiß noch nicht diese wichtige Info –