ios - 如何处理 iPhone X、Xs、Xs Max、Xr 屏幕边缘
问题描述
我在 GameScene 中的 iPhone X 上绘制、缩放和定位路径时遇到问题。看起来 frame.minX 超出了屏幕的物理边界(参见比较在 iPhone X 和 iPhone 8s 上模拟的相同代码的图像)。在绘制、缩放和定位各种 SKShapeNode、SKNode、SKSpriteNode 等时,如何处理此屏幕插图?我希望能够在绘图时轻松参考屏幕的真实边缘。
请注意,添加子视图可以正常工作(如果使用 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 上,情况并非如此。
解决方案
自然,我在 StackOverflow 上提出问题后不久就解决了这个问题。对于那些偶然发现此页面并遇到类似问题的人:
问题在于如何根据屏幕尺寸绘制 GameScene。由于 iPhone X 的屏幕比例约为 19.5:9(与其他 iPhone 上的 16:9 相比),因此画面会被裁剪。
要解决此问题,请在 GameViewController.swift 中将 设置scene.scaleMode
为.resizeFill
而不是.aspectFill
:
scene.scaleMode = .resizeFill
推荐阅读
- c# - 如何将我的 Angular 10 应用程序与 C#(包含 PostgreSQL 连接)连接?
- mysql - SQL JOIN 两个表和第二个表仅获取最新条目和 2 个 id
- asp.net-core - IWebHostBuilder.Configure() 未在 ASP.NET Core 中执行
- python - 如何正确使用 python-caldav
- c# - 无法加载文件或程序集'System.ComponentModel.TypeConverter netcore 1.1
- c# - 更新按钮不会填充在 datagridview 中
- ruby-on-rails - Azure:容器没有响应端口上的 HTTP ping:8080
- javascript - 如何设置同源策略的端口部分?
- python - 通过 django 发送邮件
- javascript - 在 State:Array 中处理多个 Checkboxed。如何?