如何根据设备屏幕尺寸转换框架?
How to convert frame based on device screen size?
我正在开发一个动态应用程序,其中我从 Web 服务中为每个 UI 对象分别获取 CGRect
(x、y、宽度、高度)值一个视图。
在服务器上,他们将根据以下大小 (1080 x 1920) 设置帧,所以假设,如果我得到一个具有以下值的 CGRect
:(200, 20, 100, 100)那么它应该根据设备大小和服务器指定的大小适合设备。
So with case of iPhone 5 - new frame will be same 200, 20, 100, 100.
So with case of iPhone 6 (375 x 667) - new frame will be ?
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
您可以使用这两种方法获取 server 和 device 具体 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;
}
希望对您有所帮助。
我正在开发一个动态应用程序,其中我从 Web 服务中为每个 UI 对象分别获取 CGRect
(x、y、宽度、高度)值一个视图。
在服务器上,他们将根据以下大小 (1080 x 1920) 设置帧,所以假设,如果我得到一个具有以下值的 CGRect
:(200, 20, 100, 100)那么它应该根据设备大小和服务器指定的大小适合设备。
So with case of iPhone 5 - new frame will be same 200, 20, 100, 100.
So with case of iPhone 6 (375 x 667) - new frame will be ?
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
您可以使用这两种方法获取 server 和 device 具体 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;
}
希望对您有所帮助。