2016-12-15 72 views
2

逆转触摸事件在我的功能混淆了斯威夫特

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)") 
    } 
} 

我得到扭转Y值。如果我点击顶部,我会得到〜0值,如果我点击底部,我会得到很高的价值。这使得我的精灵im正在向错误的Y方向移动。

但是,如果我删除self.view中的'.view',它的工作原理应该如此。有没有人知道为什么它在我使用self.view时被逆转?

+0

什么是自我类型? – dan

+0

@dan这是一个SKView ... – Whirlwind

+3

这是因为UIKit和SpriteKit的坐标系统有所不同。 UIKit在左上角有0,0。所以,正如OP已经指出的那样,仅仅使用self(这是一个场景)将按预期工作。 – Whirlwind

回答

3

正如你的问题下面的评论所解释Whirlwind,这与self是因为您表示SKScene(SpriteKit),并与self.view您使用SKViewUIView子类,所以UIKit的系统):

UIKit的坐标系iOS的原点位于绘图区域的左上角,正值向下和向右延伸。

SpriteKit坐标系统使用相同的坐标在iOS和OS X系统,具有在左下角的原点(0,0),和(1334,750)坐标在右上角。

+1

SpriteKit更改了sks文件的默认大小,它不再是1024,768现在是750,1334 – Knight0fDragon

+1

@ Knight0fDragon谢谢先生,我还不知道这个重要的信息 –