• iOS纯代码手动适配 分类: ios技术 2015-05-04 17:14 239人阅读 评论(0) 收藏


    首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述;第二种方法是和之前iPhone5的类似,比较简单,为iPhone6和6+添加两张特殊的png

    iPhone6:命名:Default-375w-667h@2x.png   分辨率:750*1334

    6+ 命名:Default-414w-736h@3x.png  分辨率:1242*2208

    注意:

    如果要在app的介绍页面里有“为iPhone6,6 plus优化”的字样就必须使用第一种方法,使用第二种方法的话还是会显示“为iPhone5优化”


    下面说一下纯代码适配

    首先iPhone5的界面一定要完全适配,这样才能完美适配6和6Plus。
    首先,我么我们要观察一下5,6和6Plus的尺寸比例关系



    很明显能看出这三种屏幕的尺寸宽高比是差不多的,因此可以在5的基础上,按比例放大来适配6和6Plus的屏幕。


    在AppDelegate.h中

    1

    2

    @property float autoSizeScaleX;

    @property float autoSizeScaleY;

    在AppDelegate.m中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    #define ScreenHeight [[UIScreen mainScreen] bounds].size.height

    #define ScreenWidth [[UIScreen mainScreen] bounds].size.width

     

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];

         

        if(ScreenHeight > 480){

            myDelegate.autoSizeScaleX = ScreenWidth/320;

            myDelegate.autoSizeScaleY = ScreenHeight/568;

        }else{

            myDelegate.autoSizeScaleX = 1.0;

            myDelegate.autoSizeScaleY = 1.0;

        }

    }


    因为iPhone4s屏幕的高度是480,因此当屏幕尺寸大于iPhone4时,autoSizeScaleX和autoSizeScaleY即为当前屏幕和iPhone5尺寸的宽高比。比如,
    如果是5,autoSizeScaleX=1,autoSizeScaleY=1;
    如果是6,autoSizeScaleX=1.171875,autoSizeScaleY=1.17429577;
    如果是6Plus,autoSizeScaleX=1.29375,autoSizeScaleY=1.2957;
    现在我们获取了比例关系后,先来看一下如何解决代码设置界面时的适配。
    CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)这个方法使我们常用的设置尺寸的方法,现在我设置了一个类似于这样的方法。
    在.m文件中

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake1(100, 100, 50, 50)];

     

    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;

    }

    这样,这个btn按钮在5,6和6Plus的位置和尺寸比例都是一样的。


    如果整个项目做完后才开始做适配的话这个方法的优势就体现出来了,面对几十个工程文件,只需自定义并且替换你的CGRectMake方法,再加上storyBoradAutoLay这个方法就瞬间完成大部分甚至全部的适配,如果遇到tableView的或者其他的手动调整一下即可。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    web设计师和前端设计师的互动—前端工程师应该具备的三种思维
    PyQt入门系列(一):Hello World
    PIL在windwos系统下Image.show无法显示图片问题的解决方法
    大赛学习笔记
    ArcGIS Add-in开发(一)--获取选定要素的属性值
    【转】WPF颜色相关操作
    斗地主小代码
    MAVEN配置私服仓库
    Error creating bean with name 'transactionManager' defined in ServletContext resource XXX
    org.hibernate.HibernateException: getFlushMode is not valid without active transaction
  • 原文地址:https://www.cnblogs.com/liuqixu/p/4683975.html
Copyright © 2020-2023  润新知