获取iOS设备屏幕分辨率
获取iOS设备屏幕分辨率

获取iOS设备屏幕分辨率

在学习坐标空间中,涉及iOS设备屏幕分辨率等知识,在这里进行梳理。

代码输出分辨率

首先,当需要获取整个iOS设备的屏幕分辨率时,可以通过设置一个填充的视图,然后添加GeometryReader获取分辨率:

struct ContentView: View {
    var body: some View {
        Rectangle()
            .opacity(0.2)
            .edgesIgnoringSafeArea(.all)
            .background(
                GeometryReader { proxy in
                    Text("分辨率")
                        .onTapGesture {
                            let screenScale = UIScreen.main.scale
                            print("Screen Scale: \(screenScale)")
                            print("Logical Width x Height: \(proxy.size.width) x \(proxy.size.height)")
                            print("Physical Width x Height: \(proxy.size.width * screenScale) x \(proxy.size.height * screenScale)")
                        }
                }
                    .edgesIgnoringSafeArea(.all)
            )
    }
}

截图为iphone 15 pro

当点击屏幕左上角的“分辨率”时,输出的内容为:

Screen Scale: 3.0
Logical Width x Height: 393.0 x 852.0
Physical Width x Height: 1179.0 x 2556.0

这里涉及到分辨率的知识:

1、屏幕缩放比例

let screenScale = UIScreen.main.scale

这段代码获取的事屏幕缩放比例,代表屏幕每个点显示了两倍或三倍的像素。

在 Retina 屏幕上,这个值通常是 2.0 或 3.0

2、逻辑尺寸

print("Logical Width x Height: \(proxy.size.width) x \(proxy.size.height)")

proxy.size: 通常是在 SwiftUI 中使用 GeometryReader 提供的 GeometryProxy 对象。

proxy.size.width: 获取视图的逻辑宽度(以点为单位)。

proxy.size.height: 获取视图的逻辑高度(以点为单位)。

逻辑尺寸: 这是设备屏幕上的“点”单位,不直接反映屏幕的物理像素。

在屏幕上调整宽高和位置,使用的都是逻辑尺寸。

3、物理尺寸

print("Physical Width x Height: \(proxy.size.width * screenScale) x \(proxy.size.height * screenScale)")

这里计算并打印视图在屏幕上的物理尺寸(以像素为单位)。

物理宽度: proxy.size.width * screenScale

物理高度: proxy.size.height * screenScale

物理尺寸: 是逻辑尺寸乘以屏幕缩放比例后得出的值,反映实际像素数。

因此,可以总结为在应用中使用的逻辑尺寸需要乘以屏幕缩放比例,然后可以得出物理尺寸:

Physical Width x Height: 1179.0 x 2556.0

这一物理尺寸也可以在网络中得到验证。

模拟器输出分辨率

如果需要使用应用进行尺寸的描画,也可以在Xcode中运行模拟器,然后使用模拟器的截图获取截图的尺寸,也就是设备的物理分辨率。

在截屏的图片信息中,可以查看到相应的尺寸为:1179*2556。

总结

可以通过代码或者模拟器来输出分辨率,也可以从网络上查找到对应的屏幕分辨率。

屏幕缩放比例通常为2.0或3.0,通过GeometryReade可以获取到相关的尺寸信息。

重要的是,可以通过逻辑尺寸和屏幕缩放比例或得到实际的物理尺寸,以便在实际上使用。

值得注意的是,我在代码输出分辨率的部分中,使用了两个edgesIgnoringSafeArea,以便让Rectangle占满屏幕以及GeometryReader无视安全区域。

如果不使用edgesIgnoringSafeArea,那么得到的尺寸也就是GeometryReader的尺寸,会缩减为:

Screen Scale: 3.0
Logical Width x Height: 393.0 x 759.0
Physical Width x Height: 1179.0 x 2277.0

可以看到,紫色区块的尺寸为1179 * 2277,刚好覆盖Rectangle所在的灰色区块。

相关文章

SwiftUI容器视图GeometryReade:https://fangjunyu.com/2024/12/15/swiftui%e5%ae%b9%e5%99%a8%e8%a7%86%e5%9b%begeometryreader/

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注