如何根据设备屏幕尺寸转换框架?

How to convert frame based on device screen size?

我正在开发一个动态应用程序,其中我从 Web 服务中为每个 UI 对象分别获取 CGRect(x、y、宽度、高度)值一个视图。

在服务器上,他们将根据以下大小 (1080 x 1920) 设置帧,所以假设,如果我得到一个具有以下值的 CGRect:(200, 20, 100, 100)那么它应该根据设备大小和服务器指定的大小适合设备。

  1. So with case of iPhone 5 - new frame will be same 200, 20, 100, 100.

  2. So with case of iPhone 6 (375 x 667) - new frame will be ?

  3. So with case of iPhone 6+ (414 x 736) - new frame will be ?

最主要的是,无论应用程序接收到特定 UI 对象的框架,它看起来都应该与管理面板中的边距完全一样。

备注,

I'm setting UI with AutoLayout in Storyboard only.

有什么建议吗?

这是一个例子:

示例 1:

|  _________________  |
| |                 | |
| |                 | |
| |                 | |
| |                 | |
| |_________________| |
|                     |

示例 2:

|          _________  |
|         |         | |
|         |         | |
|         |         | |
|         |         | |
|         |_________| |
|                     |

通过上面的例子,我试图解释,无论帧来自服务器,如果这在服务器上看起来像上面那样,那么在设备上也会类似,但它应该基于设备 CGRect.

我会说 iPhone 6 的框架是 (234, 23, 117, 117) 而 iPhone 6 Plus 是 (258, 25, 129, 129)。

我是怎么计算的? 新宽度=(旧宽度*新设备宽度)/旧设备宽度

(100 * 375) / 320 = 117

其他值也一样

如果使用自动布局,您必须在收到新值后更新约束。

根据屏幕大小和比例换帧iPhone 4s,5,6,6+.

这里你需要根据屏幕改变帧大小所以这里你有 "frames based on following size (1080 x 1920)" 这意味着你有 iPhone 6+ 帧现在看到下面的波纹管基于宽高比的图像集。

1). iPhone 5 帧 (200,20,100,100)
2). iPhone 6 帧 (200,20,155,155)
3). iPhone 6+ 帧 (200,20,194,194)


屏幕分辨率与屏幕比例。我从 This Website.

imgur.com/7zi1q.png

您可以使用这两种方法获取 serverdevice 具体 CGRect.

- (CGFloat) convertServerXorWidthValueToDeviceValueXorWidth:(CGFloat)sValue {
    CGFloat currentWidth = [UIScreen mainScreen].bounds.size.width;
    CGFloat value = ceilf((currentWidth * sValue) / 1080);
    return value;
}

- (CGFloat) convertServerYorHeightValueToDeviceValueYorHeight:(CGFloat)sValue {
    CGFloat currentHeight = [UIScreen mainScreen].bounds.size.height;
    CGFloat value = ceilf((currentHeight * sValue) / 1920);
    return value;
}

希望对您有所帮助。