Swift - 为什么 UIScreen.main.bounds 在不同的设备上表现不同?
Swift - Why is UIScreen.main.bounds behaving differently on different devices?
我正在尝试使用 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,我在顶部和右侧得到额外的 space,Ipad 的结果相同。然而,对于 iPhone 7+,我会走出屏幕。
我的第一个问题是,为什么我需要拍摄main.bounds.height * 2
垂直覆盖屏幕。 * 1
还不够吗?其次,更重要的是,为什么我在不同的设备上得到如此不同的结果?
1- 根据游戏逻辑 play space 应该有比屏幕更大的尺寸,所以精灵会从不同的位置出现,如果你将它设置为仅 *1(将填满整个屏幕,包括状态栏) , 添加的精灵将显示在屏幕上,而不是从左到右/从下到上弹跳
2- 每个设备都有自己不同的屏幕尺寸,所以它的尺寸 * 2 也会不同
往这个方向走会遇到很多问题!
您不应使用屏幕尺寸,而应使用视图控制器的视图边界。
这样做可以避免大小问题,如果您的应用程序用于多任务或其他...
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)
}
然后您可以填充您的场景并使用大小值来布置您的节点。
也许您应该检查 info.plst 以查看有关 启动屏幕 的行:
我正在尝试使用 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,我在顶部和右侧得到额外的 space,Ipad 的结果相同。然而,对于 iPhone 7+,我会走出屏幕。
我的第一个问题是,为什么我需要拍摄main.bounds.height * 2
垂直覆盖屏幕。 * 1
还不够吗?其次,更重要的是,为什么我在不同的设备上得到如此不同的结果?
1- 根据游戏逻辑 play space 应该有比屏幕更大的尺寸,所以精灵会从不同的位置出现,如果你将它设置为仅 *1(将填满整个屏幕,包括状态栏) , 添加的精灵将显示在屏幕上,而不是从左到右/从下到上弹跳
2- 每个设备都有自己不同的屏幕尺寸,所以它的尺寸 * 2 也会不同
往这个方向走会遇到很多问题!
您不应使用屏幕尺寸,而应使用视图控制器的视图边界。 这样做可以避免大小问题,如果您的应用程序用于多任务或其他...
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)
}
然后您可以填充您的场景并使用大小值来布置您的节点。
也许您应该检查 info.plst 以查看有关 启动屏幕 的行: