如何根据设备方向更改子SKView的位置?

问题描述 投票:0回答:1

如何根据设备方向更改子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 函数可以被调用来对许多子视图执行相同的数学运算吗?

任何提示,我们将不胜感激。

我不确定这是否是

正确的
swift position skview
1个回答
0
投票

设置 theScene.scaleMode = .resizeFill,而不是忍受 .aspectFill 带来的裁剪

  1. 我已经提到,问题背后的核心问题是所涉及的棋子是

    可移动的
  2. 。所以,我决定尝试一下移动的限制。例如,在横向方向时限制向右的水平移动,以便在旋转到纵向方向时对象保持可见。
  3. 我对玩弄这些限制的必要性感到不高兴..但鉴于我对轮换的了解相对较少,我目前看不到任何其他选择。

© www.soinside.com 2019 - 2024. All rights reserved.