如何根据设备方向更改子SKView的位置?
我的目标是以以下示例解释的方式更改某些子视图的
position
:
这个问题背后的全部原因集中在子视图(X)是可移动的事实上。如果在横向模式下子视图被游戏控制器移动到靠近 UIScreen 右边缘的位置,然后用户旋转到纵向模式,则当使用方向改变。
假设游戏块的 position
=
{x: 120, y: 10}
相对于
UIScreen
的 center进行测量。 如果我要计算
Point
来反映其坐标 = UIScreen
的 w,h 的百分比,则假设的
Point
将是 {x: percent*roomWidth/2, y: percdnt*roomHeight/2}
,其中:roomWidth = UIScreen.main.bounds.width
roomHeight = UIScreen.main.bounds.height
在我的 GameViewController 中,我有
#if os(iOS) && !targetEnvironment(macCatalyst)
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setGameParms()
showScene() // redraw the whole SKScene based on the above Parms
} // viewDidLayoutSubviews
#endif
func setGameParms() {
if UIDevice.current.orientation.isLandscape {
// e.g., change position of a Player
else {
// e.g., change position of a Player back
}
} // setGameParms
这是一个游戏,所以显然游戏棋子会移动..正如已经说过的,这就是问题所在。
事实上,我只处理 2 个子视图。如果还有更多 - 多痛苦啊!难道没有一个神奇的 Swift 函数可以被调用来对许多子视图执行相同的数学运算吗?
任何提示,我们将不胜感激。
我不确定这是否是
正确的设置 theScene.scaleMode = .resizeFill,而不是忍受 .aspectFill 带来的裁剪
我已经提到,问题背后的核心问题是所涉及的棋子是
可移动的我对玩弄这些限制的必要性感到不高兴..但鉴于我对轮换的了解相对较少,我目前看不到任何其他选择。