首页 > 解决方案 > 如何处理 iPhone X、Xs、Xs Max、Xr 屏幕边缘

问题描述

我在 GameScene 中的 iPhone X 上绘制、缩放和定位路径时遇到问题。看起来 frame.minX 超出了屏幕的物理边界(参见比较在 iPhone X 和 iPhone 8s 上模拟的相同代码的图像)。在绘制、缩放和定位各种 SKShapeNode、SKNode、SKSpriteNode 等时,如何处理此屏幕插图?我希望能够在绘图时轻松参考屏幕的真实边缘。

iPhone X 其他 iPhone

请注意,添加子视图可以正常工作(如果使用 UIScreen.main.bounds 而不是框架,则 UIView、按钮等都将与屏幕边缘对齐)

我曾尝试在引用框架和屏幕时绘制 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 上,情况并非如此。

标签: iosswiftiphonesprite-kit

解决方案


自然,我在 StackOverflow 上提出问题后不久就解决了这个问题。对于那些偶然发现此页面并遇到类似问题的人:

问题在于如何根据屏幕尺寸绘制 GameScene。由于 iPhone X 的屏幕比例约为 19.5:9(与其他 iPhone 上的 16:9 相比),因此画面会被裁剪。

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

scene.scaleMode = .resizeFill

推荐阅读