17年的开始

作者: Little_Shaun | 来源:发表于2017-01-07 11:41 被阅读24次

第一次写,相当于一个日记吧

转载UI适配的,怕自己将来忘记,准备做一个Demo

前言

众所周知,masonry是基于autolayout的适配,使用起来还是相对来说比较简单的。但是由于本人更倾向于比例适配(因为之间学过一段时

间Android,对Android中的比例适配比较喜欢)所以一直以来都用比例适配,最近几天朋友给我了一个自己写的demo,正好借着前几天刚学习的

UIResponder给大家讲解一下这个demo,希望对大家有帮助。在此也对我这个朋友,表示崇高的敬意。

iOS中的CGRectmake(……)方法讲解

首先我们可以根据CGRectmake(……)方法跳转至CGGeometry.h可以看到我们平时所用的一些常用方法,例如:

CGPointCGPointMake(CGFloatx,CGFloaty);CGSizeCGSizeMake(CGFloatwidth,CGFloatheight);CGRectCGRectMake(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight);

对于这些方法,不做太多解释,相信只要爬一下文档,就可以简单的使用。这里呢,借图简单的说明一下。

CGGeometry.png

思考

那么看到这里,如何写一个适配文件,供全局调用呢?

其实写一个category去扩展这个类,然后去添加一个pch文件,在pch文件中#import就可以实现调用。其实这样子的思维就比较局限了,大家可以试想,一般去设置坐标的绝对是一个UIView,那么是不是只要去扩展UIView的父类,就可以让所有的UIView去按照category中的方法进行布局?答案是肯定的。所以前几天介绍的UIResponder便派上了用场。我们可以去扩展UIResponder去实现布局。废话不多说,上代码:

UIResponder+Adapt.h

/**

需要适配的地方 替换 CGRectMake => CGRectMakeAdapt  \

e.g.  button.frame = CGRectMake(100, 100, 100, 100);

=>  button.frame = CGRectMakeAdapt(100, 100, 100, 100)

*/#import/** 适配 与设计图物理宽度比较 */@interfaceUIResponder(Adapt)#pragma mark - 默认模式为iPhone5的设计图/*!

@brief  水平比例适配

@param level 原值

@return 适配后的值

*/CGFloatAdapt_scaleL(CGFloatlevel);/*!

@brief  竖直比例适配 取值为水平比例适配

@param level 原值

@return 适配后的值

*/CGFloatAdapt_scaleV(CGFloatvertical);/** 适配CGpoint */CGPointCGPointMakeAdapt(CGFloatx,CGFloaty);/** 适配CGSize */CGSizeCGSizeMakeAdapt(CGFloatwidth,CGFloatheight);/** 适配CGRect */CGRectCGRectMakeAdapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight);/** 适配UIEdgeInsets */UIEdgeInsetsUIEdgeInsetsMakeAdapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright);#pragma mark - 选择适配方式#pragma mark 设计图为IPHONE4CGFloatAdapt_IPHONE4_scaleL(CGFloatlevel);CGFloatAdapt_IPHONE4_scaleV(CGFloatvertical);CGPointCGPointMakeIPHONE4Adapt(CGFloatx,CGFloaty);CGSizeCGSizeMakeIPHONE4Adapt(CGFloatwidth,CGFloatheight);CGRectCGRectMakeIPHONE4Adapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight);UIEdgeInsetsUIEdgeInsetsMakeIPHONE4Adapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright);#pragma mark 设计图为IPHONE5/5sCGFloatAdapt_IPHONE5_scaleL(CGFloatlevel);CGFloatAdapt_IPHONE5_scaleV(CGFloatvertical);CGPointCGPointMakeIPHONE5Adapt(CGFloatx,CGFloaty);CGSizeCGSizeMakeIPHONE5Adapt(CGFloatwidth,CGFloatheight);CGRectCGRectMakeIPHONE5Adapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight);UIEdgeInsetsUIEdgeInsetsMakeIPHONE5Adapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright);#pragma mark 设计图为IPHONE6CGFloatAdapt_IPHONE6_scaleL(CGFloatlevel);CGFloatAdapt_IPHONE6_scaleV(CGFloatvertical);CGPointCGPointMakeIPHONE6Adapt(CGFloatx,CGFloaty);CGSizeCGSizeMakeIPHONE6Adapt(CGFloatwidth,CGFloatheight);CGRectCGRectMakeIPHONE6Adapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight);UIEdgeInsetsUIEdgeInsetsMakeIPHONE6Adapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright);#pragma mark 设计图为IPHONE6PCGFloatAdapt_IPHONE6P_scaleL(CGFloatlevel);CGFloatAdapt_IPHONE6P_scaleV(CGFloatvertical);CGPointCGPointMakeIPHONE6PAdapt(CGFloatx,CGFloaty);CGSizeCGSizeMakeIPHONE6PAdapt(CGFloatwidth,CGFloatheight);CGRectCGRectMakeIPHONE6PAdapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight);UIEdgeInsetsUIEdgeInsetsMakeIPHONE6PAdapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright);@end

UIResponder+Adapt.m

#import#pragma mark - 枚举 设计图类型/**  适配类型 设计图类型 */typedefNS_ENUM(NSInteger, kAdaptModelType) {/**  5/5s设计图适配 */kAdaptTypeIPHONE5  =0,/**  6设计图适配 */kAdaptTypeIPHONE6  =1,/**  6+设计图适配 */kAdaptTypeIPHONE6P  =2,/**  4设计图适配 */kAdaptTypeIPHONE4  =3};#define IPHONE6_P_Height 736#define IPHONE6_P_Wideth 414#define IPHONE6_Height 667#define IPHONE6_Wideth 375#define IPHONE5_Height 568#define IPHONE5_Wideth 320#define IPHONE4_Height 480#define IPHONE4_Wideth 320/**

比例数据    供参考

6p/6 width: 736/667 = 1.103448  height:414/375 = 1.104

6/5  width: 667/568 = 1.174296  height:375/320 = 1.171875

6p/5 width: 736/568 = 1.295775  height:414/320 = 1.29

5/4  width: 568/480 = 1.183333  height:320/320 = 1.0

// 选择适配方法为 : 比例尺 =  设备屏幕物理尺寸宽/设计图物理尺寸宽 (pt/pt)·

*/#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)/** 获取分辨率尺寸 */#define SCREEN_SCALE_WIDTH [[UIScreen mainScreen] currentMode].size.width;#define SCREEN_SCALE_HEIGHT [[UIScreen mainScreen] currentMode].size.height;/** 获取物理屏尺寸 */#define ZM_SCREENWIDTH [[UIScreen mainScreen]bounds].size.width#define ZM_SCREENHEIGHT [[UIScreen mainScreen]bounds].size.height// 比例#define Adapt_PROPORTION_IPHONE_4_WIDTH ZM_SCREENWIDTH / IPHONE4_Wideth#define Adapt_PROPORTION_IPHONE_4_HEIGHT ZM_SCREENHEIGHT / IPHONE4_Height#define Adapt_PROPORTION_IPHONE_5_WIDTH ZM_SCREENWIDTH /IPHONE5_Wideth#define Adapt_PROPORTION_IPHONE_5_HEIGHT ZM_SCREENHEIGHT /IPHONE5_Height#define Adapt_PROPORTION_IPHONE_6_WIDTH ZM_SCREENWIDTH / IPHONE6_Wideth#define Adapt_PROPORTION_IPHONE_6_HEIGHT ZM_SCREENHEIGHT / IPHONE6_Height#define Adapt_PROPORTION_IPHONE_6_PLUS_WIDTH ZM_SCREENWIDTH / IPHONE6_P_Wideth#define Adapt_PROPORTION_IPHONE_6_PLUS_HEIGHT ZM_SCREENHEIGHT / IPHONE6_P_Height#import"UIResponder+Adapt.h"@implementationUIResponder(Adapt)// 比例尺kAdaptModelType kAdaptType = kAdaptTypeIPHONE5;#pragma mark - 默认选择iPhone5设计图模板CGPointCGPointMakeAdapt(CGFloatx,CGFloaty){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptCGPointMake(x,y);}CGSizeCGSizeMakeAdapt(CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptCGSizeMake( width , height );}CGRectCGRectMakeAdapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptCGRectMake(x, y, width, height);}UIEdgeInsetsUIEdgeInsetsMakeAdapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptUIEdgeInsetsMake( top, left, bottom, right);}#pragma mark - 选择适配方式#pragma mark 设计图为IPHONE4CGFloatAdapt_IPHONE4_scaleL(CGFloatlevel){    kAdaptType = kAdaptTypeIPHONE4;returnAdapt_scaleL(level);}CGFloatAdapt_IPHONE4_scaleV(CGFloatvertical){    kAdaptType = kAdaptTypeIPHONE4;returnAdapt_scaleV(vertical);}CGPointCGPointMakeIPHONE4Adapt(CGFloatx,CGFloaty){    kAdaptType = kAdaptTypeIPHONE4;returnAdaptCGPointMake(x,y);}CGSizeCGSizeMakeIPHONE4Adapt(CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE4;returnAdaptCGSizeMake( width , height );}CGRectCGRectMakeIPHONE4Adapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE4;returnAdaptCGRectMake(x, y, width, height);}UIEdgeInsetsUIEdgeInsetsMakeIPHONE4Adapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright){    kAdaptType = kAdaptTypeIPHONE4;returnAdaptUIEdgeInsetsMake( top, left, bottom, right);}#pragma mark 设计图为IPHONE5/5sCGFloatAdapt_IPHONE5_scaleL(CGFloatlevel){    kAdaptType = kAdaptTypeIPHONE5;returnAdapt_scaleL(level);}CGFloatAdapt_IPHONE5_scaleV(CGFloatvertical){    kAdaptType = kAdaptTypeIPHONE5;returnAdapt_scaleV(vertical);}CGPointCGPointMakeIPHONE5Adapt(CGFloatx,CGFloaty){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptCGPointMake(x,y); }CGSizeCGSizeMakeIPHONE5Adapt(CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptCGSizeMake( width , height );}CGRectCGRectMakeIPHONE5Adapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptCGRectMake(x, y, width, height);}UIEdgeInsetsUIEdgeInsetsMakeIPHONE5Adapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright){    kAdaptType = kAdaptTypeIPHONE5;returnAdaptUIEdgeInsetsMake( top, left, bottom, right);}#pragma mark 设计图为IPHONE6CGFloatAdapt_IIPHONE6_scaleL(CGFloatlevel){    kAdaptType = kAdaptTypeIPHONE6;returnAdapt_scaleL(level);}CGFloatAdapt_IPHONE6_scaleV(CGFloatvertical){    kAdaptType = kAdaptTypeIPHONE6;returnAdapt_scaleV(vertical);}CGPointCGPointMakeIPHONE6Adapt(CGFloatx,CGFloaty){    kAdaptType = kAdaptTypeIPHONE6;returnAdaptCGPointMake(x,y);}CGSizeCGSizeMakeIPHONE6Adapt(CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE6;returnAdaptCGSizeMake( width , height );}CGRectCGRectMakeIPHONE6Adapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE6;returnAdaptCGRectMake(x, y, width, height);}UIEdgeInsetsUIEdgeInsetsMakeIPHONE6Adapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright){    kAdaptType = kAdaptTypeIPHONE6;returnAdaptUIEdgeInsetsMake( top, left, bottom, right);}#pragma mark 设计图为IPHONE6PCGFloatAdapt_IPHONE6P_scaleL(CGFloatlevel){    kAdaptType = kAdaptTypeIPHONE6P;returnAdapt_scaleL(level);}CGFloatAdapt_IPHONE6P_scaleV(CGFloatvertical){    kAdaptType = kAdaptTypeIPHONE6P;returnAdapt_scaleV(vertical);}CGPointCGPointMakeIPHONE6PAdapt(CGFloatx,CGFloaty){    kAdaptType = kAdaptTypeIPHONE6P;returnAdaptCGPointMake(x,y);}CGSizeCGSizeMakeIPHONE6PAdapt(CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE6P;returnAdaptCGSizeMake( width , height );}CGRectCGRectMakeIPHONE6PAdapt(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight){    kAdaptType = kAdaptTypeIPHONE6P;returnAdaptCGRectMake(x, y, width, height);}UIEdgeInsetsUIEdgeInsetsMakeIPHONE6PAdapt(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright){    kAdaptType = kAdaptTypeIPHONE6P;returnAdaptUIEdgeInsetsMake( top, left, bottom, right);}#pragma mark - 适配#pragma mark scale//CGFloat scale_L(CGFloat level)      {return Adapt_scaleL(level);}//CGFloat scale_V(CGFloat vertical)  {return Adapt_scaleV(vertical);}CGFloatAdapt_scaleL(CGFloatlevel){CGFloatscale_L = Adapt_PROPORTION_IPHONE_5_WIDTH;switch(kAdaptType) {casekAdaptTypeIPHONE4:        scale_L = Adapt_PROPORTION_IPHONE_4_WIDTH;break;casekAdaptTypeIPHONE6:        scale_L = Adapt_PROPORTION_IPHONE_6_WIDTH;break;casekAdaptTypeIPHONE6P:        scale_L = Adapt_PROPORTION_IPHONE_6_PLUS_WIDTH;break;default:break;}returnlevel*scale_L;}CGFloatAdapt_scaleV(CGFloatvertical){returnAdapt_scaleL(vertical);}#pragma mark adaptCGPointAdaptCGPointMake(CGFloatx,CGFloaty){returnCGPointMake(Adapt_scaleL(x), Adapt_scaleV(y));}CGSizeAdaptCGSizeMake(CGFloatwidth,CGFloatheight){returnCGSizeMake( Adapt_scaleL(width) , Adapt_scaleV(height));}CGRectAdaptCGRectMake(CGFloatx,CGFloaty,CGFloatwidth,CGFloatheight){returnCGRectMake(Adapt_scaleL(x), Adapt_scaleV(y), Adapt_scaleL(width), Adapt_scaleV(height));}UIEdgeInsetsAdaptUIEdgeInsetsMake(CGFloattop,CGFloatleft,CGFloatbottom,CGFloatright){returnUIEdgeInsetsMake(Adapt_scaleV(top), Adapt_scaleL(left), Adapt_scaleV(bottom), Adapt_scaleL(right));}@end

这些代码其实不难,但是整理出来还是需要一番功夫的,所以应该向我的那位朋友致敬:曾墨

引用很简单,首先得导入头文件,在这里呢,建议建立pch文件一次性导入,然后呢,你会发现,你可以通过绝对布局,实现所有屏幕的适配,最主要的是:方法还跟以前超级类似:主要调用这几个方法:

CGPoint CGPointMakeAdapt(CGFloat x, CGFloat y);

CGSize CGSizeMakeAdapt(CGFloat width, CGFloat height);

CGRect CGRectMakeAdapt(CGFloat x, CGFloat y, CGFloat width, CGFloat height);

UIEdgeInsets UIEdgeInsetsMakeAdapt(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right);

相关文章

  • 开始的开始

    怀揣着对大学的梦想,我走进了我的大学NCU。 刚进大学时的军训,水得让人舒服,没有一丝锻炼人的意味...

  • 开始的开始

    开始的开始 从未想过这是一盘死棋 只是如分别几年再聚首的同学一样 互加个微信 偶尔聊上几句 至今都想不起 究竟是从...

  • 开始的开始

    从前一直以为,高三那年的下半学期,是我十七岁生命中度过的最难熬的日子了。 没完没了的周练模拟考,灯不熄笔不停的晚自...

  • 开始的开始

    简书是一个激发我创作欲望的APP,每当我想放弃梦想的时候只要打开这个软件,阅读里面的文章,总是不自觉的想,写文...

  • 开始的开始

    突然焦灼的契机,是嵌入式课程的实验。安卓开发。我一直都知道,像PS,AS这些开发软件的美妙之处。恍然发觉,荒芜了三...

  • 开始的开始

    我一直尝试开始写点什么,噢,更确切的说是想,因为我很难写下去。我不知道是不是因为我起初就选择了一个我暂时没能力写作...

  • 开始的开始

    ——最后的最后 “开始的开始,我们都是孩子;最后的最后,渴望变成天使。” 今天高一同学裕程突然发条信...

  • 开始的开始

    三月二十一号,春分,天气微凉,细碎的晚风隔着窗户嘶嘶作响,远方高楼上的灯火发出昏黄色的光,偶尔传来的鸣笛声...

  • 开始的开始

    曾经孩童的我们都有一个梦,嗅着它稚嫩的气息,一路走来。有一天那个画面就在身边,我们带着家人环游着世界。这个...

  • 开始的开始

    11月28日,星期三,圣地亚哥皮蛋横沟村开通了农村网。本是一片腐朽山石的阴沟里,乌云密布,天昏地暗,霉苔遍地,突然...

网友评论

    本文标题:17年的开始

    本文链接:https://www.haomeiwen.com/subject/kshfbttx.html