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

36 篇文章 0 订阅
22 篇文章 0 订阅
    <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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值