iOS重新定义系统自带的方法,如 重定义 CGRectMake 和 CGPointMake 可以解决屏幕适配的问题

来源:互联网 发布:cc防护php代码 编辑:程序博客网 时间:2024/05/10 14:39
    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">    在网上找了些屏幕适配的方法,因为之前的适配把屏幕划分为不同比例的部分,还有就是使用 storyBoard ,由于是纯代码开发,又是在基本功能都完成了之后 才适配,就想着找一些简单的适配方法</span>  

手机型号 宽 长
iPhone 4s ,320 , 480
iPhone 5 ,320 ,568
iPhone 5s ,320 ,568
iPhone 6 , 375 , 667
iPhone 6 plus ,414 ,736
iPhone 6s ,375 , 667
iPhone 6s plus ,414 , 736

每个屏幕之间都是有一定的比例的,如果你做好了一个型号的话,想让其他型号显示的效果也和这个做好的型号的效果相同,那么就可以用这个方法:通过计算各个尺寸手机的比例 重新定义 CGRectMake 和 CGPointMake 方法,那么效果是一样的

1, 在 AppDelegate.h 文件中 声明:

[objc] view plaincopy    @property float autoSizeScaleX;      @property float autoSizeScaleY;  

2, 在 AppDelegate.m 文件中 写如下方法

[objc] view plaincopy    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {      AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];          if (kScreenHeight != 667) {              myDelegate.autoSizeScaleX = kScreenWidth/375;              myDelegate.autoSizeScaleY = kScreenHeight/667;          } else {              myDelegate.autoSizeScaleX = 1.0;              myDelegate.autoSizeScaleY = 1.0;          }      return YES;      }  

3, 在你要适配的 地方

导入 AppDelegate.h

然后在 文件最下方 写重构 CGRectMake 和 CGPointMake 方法

[objc] view plaincopy    CG_INLINE CGRect      CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)      {          AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];          CGRect rect;          rect.origin.x = x * myDelegate.autoSizeScaleX; rect.origin.y = y * myDelegate.autoSizeScaleY;          rect.size.width = width * myDelegate.autoSizeScaleX; rect.size.height = height * myDelegate.autoSizeScaleY;          return rect;      }      CG_INLINE CGPoint      CGPointMake1(CGFloat x, CGFloat y)      {          AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];          CGPoint point;          point.x = x * myDelegate.autoSizeScaleX;          point.y = y * myDelegate.autoSizeScaleY;          return point;      }  

在需要适配的控件 初始化的地方 ,把 CGRectMake 和 CGPointMake 换成 CGRectMake1 和 CGPointMake1,如:

[objc] view plaincopy    UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake1(0, 0, image.size.width/2, image.size.height/2)];      imgView.center = CGPointMake1(604/4, 174/2+image.size.height/2/2);  

需要注意的是 在重构方法的时候 不能与要重构的方法重名,否则报错

原文:http://blog.csdn.net/cloverzhu/article/details/50252399

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 sw过膝靴往下掉怎么办 如果被绑架了该怎么办 怀孕了%2c怎么办%3f 狗狗拉肚子怎么办带血 同学们不和我玩怎么办 懒癌和拖延症怎么办 有严重的拖延症怎么办 有拖延症的人怎么办 10多天月经不停怎么办 20多天月经不停怎么办 月经来了十几天不停怎么办 例假20多天不停怎么办 苹果6dns被劫持怎么办 工地欠工资不给怎么办 买的狗得病了怎么办 剖腹产9天刀口痒怎么办 剖腹产6天刀口痒怎么办 剖腹产2年刀口痒怎么办 破腹产9天刀口痒怎么办 破腹产7天刀口痒怎么办 剖腹产8天伤口痒怎么办 刨腹产9天刀口痒怎么办 破腹产8天刀口痒怎么办 二胎刀口1.1mm薄怎么办 土豪养成记2闪退怎么办 爱上不该爱的人怎么办? 有妇之夫爱上我,怎么办 全身起疙瘩很痒怎么办 怀孕了肚子很痛怎么办 月经来肚子疼的厉害怎么办 孕妇9个月肚子疼怎么办 斗鱼身上长白点怎么办 8个月宝宝肚子疼怎么办 1岁半宝宝肚子痛怎么办 3岁宝宝肚子疼怎么办啊 吃的太辣肚子疼怎么办 2岁半宝宝肚子疼怎么办 2岁宝宝肚子痛哭怎么办 怀孕3个月拉肚子怎么办 一岁宝宝消化不良拉肚子怎么办 后背长好多痘痘怎么办