【问题标题】:How to Handle iPhone X, Xs, Xs Max, Xr Screen Edge如何处理 iPhone X、Xs、Xs Max、Xr 屏幕边缘
【发布时间】:2019-07-14 23:05:21
【问题描述】:

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

请注意,添加子视图可以正常工作(如果使用 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 上,情况并非如此。

【问题讨论】:

    标签: ios swift iphone sprite-kit


    【解决方案1】:

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

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

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

    scene.scaleMode = .resizeFill
    

    【讨论】:

    • 不是推荐的修复方法。十分之九,你想要.aspectFill,所以你需要围绕不同的纵横比设计你的游戏,否则你将在不同的设备上提供完全不同的体验。
    猜你喜欢
    • 2019-02-24
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多