iPhone多尺寸屏幕适配--等比例数值计算

作为一个iOS开放者,在iPhone6和iPhone6 plus发布之后,慢慢的都会遇到屏幕适配的问题。

在讨论适配之前,我们先来看看系统提供的放大模式。

放大模式下:屏幕尺寸仍然为320宽度,会根据设备,界面等比放大至其他屏幕宽度的尺寸,由于是放大,会导致界面有轻微的模糊,并且状态栏也会和平时不一样(明显变大了)。

那么适配模式下呢?不同尺寸设备的屏幕点像素是不一样的,如果要处理一个界面,并且要求iPhone6plus和iPhone5S是同一套设计稿,看起来一样比例。那么怎么破?



无论是使用传统布局,还是使用AutoLayout,都避不开的是界面的数值计算,比如同一个左边距,在iPhone5下是10px,但是等比换算到iPhone6plus的时候差不多就是13px了,莫非为了不同屏幕看起来比例一样,我们还要分开处理,用条件来判断并分别布局么?

当我开始这么想的时候,我是拒绝的,因为我们是爱加特效的开发者,怎么能连等比例计算都不会玩呢?

好了拿到iPhone5s屏幕尺寸640*1136的设计稿,什么?左边距是20px?

CGFloat leftPadding = 10*SCREEN_WIDTH/320.0;

LOOK! 我们已经有了一个可以在各个尺寸屏幕下按同一个设计稿等比例适应的左边距了! 恩恩,还有很多值,一个个来…

CGFloat rightPadding = 15*SCREEN_WIDTH/320.0;
CGFloat topPadding = 20*SCREEN_WIDTH/320.0;
.....

等等,这么算,貌似有很多重复的东西出现了:SCREEN_WIDTH/320.0,作为一个有追求的开发者,怎么能忍受那么多重复的计算。必须加特效!

这里我为了便捷,使用类似CGRect之类C函数实现,考虑性能没有使用inline。建立一个空的UIView的category

.h头文件中:

extern CGFloat CGFloatIn320(CGFloat value);

.m实现文件中:

static CGFloat ratio = 0;//这是为了只算一次不要浪费太多计算比例的性能
CGFloat CGFloatIn320(CGFloat value){
    if (ratio==0) {
        ratio = ([UIScreen mainScreen].bounds.size.width
        >[UIScreen mainScreen].bounds.size.height
        ?[UIScreen mainScreen].bounds.size.height
        :[UIScreen mainScreen].bounds.size.width)/320.0;
    }
    return value*ratio;
}

好了,现在再来计算我们的边距:

CGFloat leftPadding = CGFloatIn320(10);
CGFloat rightPadding = CGFloatIn320(15);
CGFloat topPadding = CGFloatIn320(20);
.....

这样看起来真的是蛮不错啊,相信许多开发小伙伴也在用类似这样的方式做布局,总体上来说,这是要求不同尺寸相同比例布局的一个可行的方案,但是还是要多说两句:这种方式下的计算有时候会存在很小很小的偏差,虽然不多,但是有时候也会影响效果,所以,必要时的等分计算、自动布局的使用都是提高界面精确程度的方式。

当然,这么简单的文章相信大家都能看得懂。最后贴上一篇别人家的文章,希望大家都能做好适配处理:

iPhone 6出现后,如何将一份设计稿支持多个尺寸?

时间: 2024-10-13 15:04:16

iPhone多尺寸屏幕适配--等比例数值计算的相关文章

iPhone设备及屏幕适配

// // Common.h // 微信 // // #ifndef Common_h #define Common_h // iPhone设备及屏幕适配 //4的设备 #define KDevice_Is_Retina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode]

iOS屏幕适配(尺寸适配)

屏幕适配在用Masonry.或者其他的感觉有点用不习惯,屏幕尺寸适配是我在前辈哪儿雪来的,简单分享一下我的写法,不成熟之处望多多指教,仅供参考:建议跟着代码敲一遍,以后自己用者熟悉方便,原理也很简单:废话有点多了,上 创建项目-创建PCH文件:若要创建.pch , 在other里选择 PCH file,并需要修改一下设置.在build settings 里设置 Precompile Prefix Header的值为YES,并设置Prefix Header的路径. 创建一个扩展文件UIView+C

Android 尺寸单位转换和屏幕适配相关

一:Android 屏幕适配 众所周知,Android机型尺寸各种各样,于是屏幕适配就成了Android开发中很重要的一环.Android屏幕适配可能一些开发者都会遇到这样的问题,今天就来分享下屏幕适配,其实Android屏幕适配也可以很简单. 基本概念 Android屏幕适配必须要理解的一些概念: px 是英文单词pixel的缩写,意为像素,屏幕上的点.我们通常所说的分辨率如480X800就是指的像素. 在设计领域中,像素是用来计算数码影像的最小单位.计算机中显示的图像并非连续的线条组成,而是

多种屏幕尺寸下屏幕适配方法

自从iPhone 6及iPhone 6 Plus出现之后,iPhone需要适配的屏幕尺寸就达到了四种之多,屏幕适配就成为了开发者们最需考虑的问题. iPhone4.iPhone4s,分辨率960 * 640 ,长宽比1.5 iPhone5.iPhone5s,分辨率1136 * 640 ,长宽比1.775 iPhone6,分辨率1334 * 750 ,长宽比1.778 iPhone6+,分辨率1920 * 1080,长宽比1.777 由此可见,只有iPhone4和iPhone4s和iPhone5及

android屏幕适配,除了使用dp,还可以使用比例

在android中为了适应不同分辨率的屏幕,引入了密度无关像素density-independent pixes,也就是dip,也可以简写为dp.之所以是与密度无关,是因为android为不同的密度提供了不同的scale值,比如mdpi的值为1,hdpi为1.5,xhdpi为2.这样,如果使用相同的dp值,系统在转换为px时,会使用dp*scale值,这样得到的比例大家都相同,而比例相同了,也就意味着屏幕适配了.如480*800,4.0inch的屏幕,为hdpi.屏幕的一半可以用160dp表示,

iphone及ipad屏幕尺寸参考

初代iPhone 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone 3GS也保持不变.那时编写iOS的App(应用程序),只支持绝对定位.比如一个按钮(x, y, width, height) = (20, 30, 40, 50),就表示它的宽度是40像素,高度是50像素,放在(20, 20)像素的位置. iPhone 4 2010年,iPhone 4发布,率先采用Retina显示屏,在屏幕的物理尺寸不变的情

iOS开发点滴:iPhone屏幕适配

最近开始做iOS开发,遇到一些小问题和解决方法,记录下. 今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面是4寸的,把按钮放到底部,模拟器选成3.5寸的按钮就看不到了,找到了解决方法: http://stackoverflow.com/questions/18248789/xcode-autosizing-preview-window-missing 注意,文字内容说的是uncheck "Use Autol

纯代码 自动屏幕适配iPhone

代码判断,你也可以用xib自带的自动布局选项 我是用的纯代码写的 纯代码 自动屏幕适配iPhone,布布扣,bubuko.com

New UI-获取手机屏幕尺寸与分辨率,屏幕适配,横竖屏问题

New UI-获取手机屏幕尺寸与常用分辨率,屏幕适配,横竖屏问题 --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http:/