Swift - 为什么UIScreen.main.bounds在不同的设备上表现不同?

时间:2018-03-30 11:11:08

标签: ios swift sprite-kit screen-size uiscreen

我正在尝试使用SpriteKit为IOS创建游戏。我的问题是不同的设备输出不同的东西。这是我尝试的代码:

var testPath = CGRect(
   x: 0,
   y: 0,
   width: UIScreen.main.bounds.width * 2,
   height: UIScreen.main.bounds.height * 2
)
var testFill = SKShapeNode(path: CGPath(rect: testPath, transform: nil))

testFill.fillColor = UIColor.black
addChild(testFill)

对于iPhone 7,这非常有效。对于iPhone 5,我在顶部和右侧获得了额外的空间,与Ipads相同。但是,对于iPhone 7+,我会离开屏幕。

我的第一个问题是,为什么我需要main.bounds.height * 2垂直覆盖屏幕。 * 1不应该足够吗?其次,更重要的是,为什么我会在不同的设备上得到如此不同的结果?

3 个答案:

答案 0 :(得分:1)

如果你朝这个方向努力,你将面临许多问题!

您不应使用屏幕大小,而应使用视图控制器的视图范围。 这样做可以避免尺寸问题,如果你的应用程序可以在多任务中使用,或者...... [/ p>

override func viewDidLoad() {
    super.viewDidLoad()
    let skView = SKView(frame: self.view.bounds) 
    view.addSubview(skView);
    let scene = MyScene(size: view.bounds.size) // <- construct your scene with the screen size
    skView.presentScene(scene)
  }

然后,您可以填充场景并使用大小值来布局节点。

答案 1 :(得分:0)

1-根据游戏逻辑游戏空间应该有比屏幕更大的尺寸,所以精灵来自不同的位置,如果你将其设置为仅* 1(将填满整个屏幕包括statusBar),添加的精灵将显示在屏幕而不是从左到右/从下到上反弹

2-每个设备都有自己不同的屏幕尺寸,因此它的尺寸* 2也会不同

答案 2 :(得分:0)

也许您应该检查您的 info.plst 以查看有关启动屏幕的行:https://stackoverflow.com/a/62749138/13433324