2016-12-15 79 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謝謝先生,我還不知道這個重要的信息 –