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
- iOS重新定义系统自带的方法,如 重定义 CGRectMake 和 CGPointMake 可以解决屏幕适配的问题
- iOS重新定义系统自带的方法,如 重定义 CGRectMake 和 CGPointMake 可以解决屏幕适配的问题
- iOS 宏定义~ systemOfMacro(系统自带的宏)
- 需要重新系统自带的方法
- iOS 如何创建可以带参数的宏定义
- 开发方法的“轻”和“重”定义
- 一个猥琐的方法:解决模板类静态成员重定义的问题
- “locktype”enum type 类型重定义问题的解决
- error C2011: “Shape”:“class”类型重定义 问题的解决
- “locktype”enum type 类型重定义问题的解决
- SOM_PAK源码编译出现getline重定义问题的解决
- 关于问题定义和解决的感想
- #ifndef 解决局部变量定义的问题——共享文件头导致重定义问题
- 定义带带返回值的方法
- 如何用win7自带的功能重新划分硬盘
- WP7 重新定义返回键的方法
- 关于php 类 方法重定义的问题
- 解决typedef重定义问题
- GNS下搭建BGP网络环境
- ZZUOJ-10437: 小d的翻转游戏
- mysql Table 'performance_schema.session_variables' doesn't exist
- Web Service 标准
- typedef __packed struct
- iOS重新定义系统自带的方法,如 重定义 CGRectMake 和 CGPointMake 可以解决屏幕适配的问题
- 深入浅出设计模式(一):单例模式
- 看godoc的命令
- 安装Yum时Header V3 DSA signature: NOKEY, key ID e8562897
- Spring事务配置的五种方式
- 高性能、高并发、高扩展性和可读性的网络服务器架构:StateThreads
- 欢迎使用CSDN-markdown编辑器
- iOS史上最全界面跳转传值总结及分析-包括属性传值、代理传值、通知传值、单例传值、代码块传值
- WebForm框架页面上js修改服务端控件导致后台不能正确获取到控件值的问题【总结】