如何处理iPhone X,Xs,Xs Max,Xr屏幕边缘

时间:2019-07-14 23:05:21

标签: ios swift iphone sprite-kit

在GameScene中的iPhone X上绘制,缩放和定位路径时遇到麻烦。似乎frame.minX在屏幕的物理范围之外(请参见比较在iPhone X和iPhone 8s上模拟的相同代码的图像)。在绘制,缩放和定位各种SKShapeNode,SKNode,SKSpriteNode等时,如何处理此屏幕插图?我希望能够在绘制时轻松参考屏幕的真实边缘。

iPhone X Other iPhone

请注意,添加子视图效果很好(如果使用UIScreen.main.bounds而不是框架,则UIViews,按钮等都将与屏幕边缘对齐)

我曾尝试在参考框架和屏幕时绘制SKShapeNodes,但都无法精确地绘制iPhone X屏幕的真实边缘和其他iPhone的边缘。

override func didMove(to view: SKView) {
        let shape = SKShapeNode()
        shape.path = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 200, height: 200)).cgPath
        shape.fillColor = .green
        shape.position = CGPoint(x: frame.minX, y: frame.maxY - shape.frame.height)
        addChild(shape)
}

对于所有模拟,绿色方块与屏幕的左边缘完美对齐。但是,在iPhone X,Xs,Xs Max和Xr上并非如此。

1 个答案:

答案 0 :(得分:0)

自然,在StackOverflow上提出问题后,我很快就解决了问题。对于那些在页面上偶然遇到类似问题的人:

问题在于如何根据屏幕尺寸绘制GameScene。由于iPhone X的屏幕比例为〜19.5:9(其他iPhone上为16:9),因此边框被裁剪了。

要解决此问题,请在GameViewController.swift中将scene.scaleMode设置为.resizeFill而不是.aspectFill

scene.scaleMode = .resizeFill