• iOS开发中,会要求导入@1x、@2x和@3x: 使用@1x格式:iPhone3GS 使用@2x格式:iPhone 4,4S,5,5S,5C,SE,6,6S,7,8,XR 使用@3x格式:iPhone 6Plus、6sPlus、7Plus、8Plus、X、XS、XS Max 这样在开发过程...

    iOS开发中,会要求导入@1x、@2x和@3x:

    使用@1x格式iPhone3GS

    使用@2x格式iPhone 4,4S,5,5S,5C,SE,6,6S,7,8,XR

    使用@3x格式iPhone 6Plus、6sPlus、7Plus、8Plus、X、XS、XS Max

    这样在开发过程中,将三种图片(比如分别为1.png、1@2x.png和1@3x.png)导入到工程图库中的时候可以自动被识别为1x、2x和3x大小的图片

    可以利用Mac系统中自带的服务自己制作一个快速生成@1x、@2x和@3x图片的功能

    首先spotlight搜索Automator,然后按Enter打开

    Snip20160127_93

    新建文稿 

    Snip20160127_94

    选取文稿类型为 快速操作

    Snip20160127_95

    在工作流程收到当前的后面选择图像文件

    Snip20160127_108

    在左边窗口的“操作”下,选择“资源库”中的“文件和文件夹”,将右侧中的“给访达项目重新命名”拖入最右侧的大窗口中,(如果警告提示是否要增加一个“拷贝访达项目”操作,选择“不添加”),选择“添加文本”,在输入框中输入【@3x

    拖入“复制访达项目

    选择左侧“资源库”中的照片,将“缩放图像”拖入右侧窗口(如果警告提示是否要增加一个“拷贝访达项目”操作,选择“不添加”),并选择“按百分比”,输入【66

    再拖入“文件和文件夹”下的“给访达项目重新命名”,并选择【替换文本】,查找【】,以【仅基本名称】;再拖入“文件和文件夹”下的“给访达项目重新命名”,并选择【替换文本】,查找【@3x”的副本】,以【仅基本名称】,替换成【@2x

    拖入“复制访达项目”,选择左侧“资源库”中的照片,将“缩放图像”拖入右侧窗口(如果警告提示是否要增加一个“拷贝访达项目”操作,选择“不添加”),并选择“按百分比”,输入【50

    再拖入“文件和文件夹”下的“给访达项目重新命名”,并选择【替换文本】,查找【】,以【仅基本名称】,再拖入“文件和文件夹”下的“给访达项目重新命名”,并选择【替换文本】,查找【@2x”的副本】,以【仅基本名称

    然后保存,将“快速操作”存储为“制作@2x@3x图片

     

    每次使用的时候,只需选中图片,选择访达 -> 服务 -> 制作@2x@3x图片就会自动生成三个图片:1.png、1@2x.png和1@3x.png

    最终效果~

     

    展开全文
  • 1x 、2x 、3x图片介绍 手机屏幕分两种 视网膜屏: 又叫Retain屏幕,就是高清视网膜屏幕,分辨率宽高是标准屏幕分辨率的2倍 非视网膜屏 又叫非Retain屏,是标准分辨率 分辨率 概念:分辨率的意思就是把...

    1x 、2x 、3x图片介绍

    手机屏幕分两种

    1. 视网膜屏:
      • 又叫Retain屏幕,就是高清视网膜屏幕,分辨率宽高是标准屏幕分辨率的2倍
    2. 非视网膜屏
      • 又叫非Retain屏,是标准分辨率

    分辨率

    • 概念:分辨率的意思就是把屏幕进行横向、纵向等分,通常描述手机屏幕用来表示,在retina屏幕下,一个点表示两个像素,在非retina屏幕下,一个点表示一个像素,而像素,就是常说的分辨率,在iPhone6 Plus下,一个点表示3个像素

    iPhone手机的分辨率


    • 在上图可以看出
      1. iPhone3GS的手机,是非视网膜屏幕,它的点 和 分辨率 是相同的,也就是两者相除 得 1
      2. 在iphone4/4S/5/5C//5S/6,它们都是视网膜屏幕,分辨率正好是点的两倍,相除得2
      3. 而在iPhone6 Plus,虽然也是视网膜屏幕,但是分辨率是点的三倍,也就是相除得3

    1x 2x 3x 图片

    • 由于不同手机的屏幕的分辨率和它的点的倍数,是不同的,所以我们在实际开发中需要准备多套图片
    • 由于目前只存在1倍,2倍,3倍,这几种,所以目前准备的图片就分 1x,2x,3x图,当然由于只有3GS手机才是1x图,而3GS手机,基本上已经无人使用,可能很多公司已经不再去制作1x图片

    图片的命名规则:

    • 1x图片: 直接使用文件名 btn_left.png
    • 2x图片: 在文件名后加上@2x标识 btn_left@2x.png
    • 3x图片: 在文件后加上@3x标识 btn_left@3x.png

    总结

    1. 在同样一个尺寸的屏幕下由于使用的屏幕不一样(retina和非retina),所以造成的屏幕分辨率会不同.也就是说,同样是30*30的像素,在3.5 inch大小的屏幕上,如果是非retina显示会大一些,retina屏幕显示会小一些。
    2. 在开发中使用的是点.(比如 30 * 30 ,不是表示30像素,而是表示30点,这样的话iOS系统会自动把点转换为对应的像素)
      • 非retina屏幕1个点表示1像素
      • retian屏幕1个点表示2像素
      • iPhone6 Plus 下1个点表示3像素
    3. 因为程序中的是,iOS系统会自动把点转换为不同的像素去找图片,所以图片对应的也要准备多份不同的图片,
      • @2X:视网膜屏幕,在原来点坐标的大小上乘以2
      • @3X:在原来的坐标的大小上乘以3
    展开全文
  • 在xcode的images.xcassets中丢入图片后,这些图片会被默认划分为三种尺寸。 假设图片名为bdlogo.png ...假设图片名为bdlogo@3x.png 则这张图片会被自动填充到2x的位置 下面是这三种标示符的说明。 @1x 为非retin

    在xcode的images.xcassets中丢入图片后,这些图片会被默认划分为三种尺寸。

    假设图片名为bdlogo.png

    则这张图片会被自动填充到1x的位置

    假设图片名为bdlogo@2x.png

    则这张图片会被自动填充到2x的位置

    假设图片名为bdlogo@3x.png

    则这张图片会被自动填充到2x的位置


    下面是这三种标示符的说明。


    @1x 为非retina屏的iphone。iphone4以前,不包含4的手机需要使用这个标示。

    @2x 为retina屏的iphone准备。iphone4/4s/5/5c/5s/6 使用该标示,最常用

    @3x 专为iphone6p准备。iphone6 plus使用该标示。比较常用


    另外。当对应图片缺失时会这样做

    缺少@3x时,iphone6plus会自动去拿@2x的图来使用,并同时放大1.5倍

    缺少@2x和@3x时,iphone6plus会自动去拿@1x的图来用,并同时放大3倍

                                     iphone4/4s/5/5c/5s/6会去拿@1x的图来用,并同时放大2倍

    缺少@2x时, iphone4/4s/5/5c/5s/6会去拿@1x的图来用,并同时放大2倍


    所以现在这阶段做项目还是尽量把2x和3x的图备齐吧


    另外下面是一个自动配齐图片的xcode插件。各位可以试试

    https://github.com/rickytan/RTImageAssets


    另外。在ios8以后,只要有3x的图片在。都会被优先使用。


    注意,当不想要某张图的时候,除了要从images.xcassets中删除以外,还得clean一遍,不然

    UIImage imageNamed方法还是会取得以前的图片的。



     
    展开全文
  • 一、图片格式@2x与@3x 应对非视网膜和视网膜屏,APP有时会提供不同大小的图片,1倍图和2倍图和3倍图,它们的像素与1倍数图相比相差2倍或者3倍。 命名规则:2倍图在1倍图的名字后加 @2x 普通:sample.png  2倍:...

    一、图片格式@2x与@3x

    应对非视网膜和视网膜屏,APP有时会提供不同大小的图片,1倍图和2倍图和3倍图,它们的像素与1倍数图相比相差2倍或者3倍。

    命名规则:2倍图在1倍图的名字后加 @2x

    • 普通:sample.png 
    • 2倍:sample@2x.png 
    • 3倍:sample@3x.png 

    系统用“sample”寻找图片的时候,会自动根据设备屏幕取对应的图片

    由于retina屏幕的普及,现在工程中用得最多的是@2x和@3x图片

    二、加载图片的方法

    图片资源在工程的位置如下图


    方法一:

    -(void)setImageView1{
        UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(80, 80, 180, 180)];
        imageView.backgroundColor = [UIColor blueColor];
    //只有test@2x与test@3x图片
        //4s 5 5s 6 6s 会自动加载test@2x图片
        //6Plus 6sPlus 会自动加载test@3x图片
        imageView.image = [UIImage imageNamed:@"test"];
        [self.view addSubview:imageView];
    }
    PS:这种方法可以加载到逻辑路径中的资源 也可以加载到Assets.xcassets中的资源,而且会根据设备自动匹配@2x和@3x图片。

    方法二:

    -(void)setImageView2{
        //此处的路径是物理路径如果是逻辑路径是获取不到资源的
        //这里填写test@2x或者test@3x都可以(只要这个文件在wwwwww这个文件夹真实存在即可),主要是获得这个物理路径。
        //获得到这个路径之后 后边才会根据设备自动加载@2x图片或者@3x图片。
        NSString *path = [[NSBundle mainBundle] pathForResource:@"wwwwww/test@2x" ofType:@"png"];
        NSLog(@"path = %@",path);
        //因为www是逻辑路径,用此方法是加载不到这个文件的
         NSString *path1 = [[NSBundle mainBundle] pathForResource:@"www/test@2x" ofType:@"png"];
        //所以path1的值为null;
        NSLog(@"path1 = %@",path1);//path1 = null;
        UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(80, 80, 180, 180)];
        imageView.backgroundColor = [UIColor blueColor];
        //4s 5 5s 6 6s 会自动加载test@2x图片
        //6Plus 6sPlus 会自动加载test@3x图片
        imageView.image = [UIImage imageWithContentsOfFile:path];
        [self.view addSubview:imageView];
    }
    

    PS1:这种方法如果加载物理路径中的资源文件需要把路径指定完全。

    PS2:逻辑路径中的文件其实也可以用这中方法来加载,只不过逻辑路径中的资源文件的存储位置跟文件夹显示的路径没有关系,如下:


    -(void)setImageView3{
        //从此也可以看出逻辑路径下的资源文件的路径并没有真正存在 都是在工程的 根目录下app/资源文件
        UIImageView * imageViewImage = [[UIImageView alloc] initWithFrame:CGRectMake(40, 40, 100, 100)];
        imageViewImage.backgroundColor = [UIColor blueColor];
        
        //下面两种写法都没有写成:test/inTest/inTest 这种物理路径的方式,其实写成这样是识别不到inTest.png文件的 因为路径并不存在
    #if 1
        NSString * mainPath = [[NSBundle mainBundle] resourcePath];
        NSString * path = [NSString stringWithFormat:@"%@/inTest",mainPath];
    #else
        NSString * path = [[NSBundle mainBundle] pathForResource:@"inTest" ofType:@"png"];
    #endif
        UIImage * image = [UIImage imageWithContentsOfFile:path];
        imageViewImage.image = image;
        [self.view addSubview:imageViewImage];
    }
    

    三、imageNamed 与 imageWithContentsOfFile的区别

    myImage = [UIImage imageNamed:@"icon.png"];

    这种方法在一些图片很少,或者图片很小的程序里是ok的。
    但是,在大量加载图片的程序里,请千万不要这样做。
    为什么呢 ???????

    这种方法在application bundle的顶层文件夹寻找由供应的名字的图象 。 如果找到图片,装载到iPhone系统缓存图象。那意味图片是(理论上)放在内存里作为cache的。

    试想你图片多了,是什么后果``````

    图片cache极有可能不会响应 memory warnings and release its objects

    所以,用图片的时候一定要小心的alloc和release
    推荐使用

    NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
    myImage = [UIImage imageWithContentsOfFile:path];
    四、用UIImage加载图像的方法很多,常用如下:

        1、用imageNamed函数

    [UIImage imageNamed:ImageName];

        2、用imageWithContentsOfFile函数

    [UIImage imageWithContentsOfFile:path];

        3、用NSData的方式加载,例如:
    NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
    NSData *image = [NSData dataWithContentsOfFile:filePath];
    [UIImage imageWithData:image];

            1)用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的 内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一 个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利 用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在 一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图 像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。

        2)利用NSData方式加载时,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。

        无论用哪种方式加载图像,图像使用结束后,一定要记得显示释放内存。

    参考文章:

    http://www.cnblogs.com/pengyingh/articles/2355033.html



    展开全文
  • iOS @2x 与@3x 图的详解

    2015-10-21 14:17:03
    初代iPhone 2007年,初代iPhone发布,屏幕的宽高是 320 x...那时编写iOS的App(应用程序),只支持绝对定位。比如一个按钮(x, y, width, height) = (20, 30, 40, 50),就表示它的宽度是40像素,高度是50像素,放在

    初代iPhone

    2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素。下文也是按照宽度,高度的顺序排列。这个分辨率一直到iPhone 3GS也保持不变。


    那时编写iOS的App(应用程序),只支持绝对定位。比如一个按钮(x, y, width, height) = (20, 30, 40, 50),就表示它的宽度是40像素,高度是50像素,放在(20, 20)像素的位置。


    iPhone 4

    2010年,iPhone 4发布,率先采用Retina显示屏,在屏幕的物理尺寸不变的情况下,像素成倍增加,达到 640 x 960 像素。


    这样就出现一个问题,怎么让原有的App运行在新的手机上面?iPhone手机一个优势,就是有众多优秀的App,假如不兼容原有的App,就相当于放弃这个得来不易的优势,是很不明智的。


    每当iPhone的屏幕有所变化,比如iPhone 3GS过渡到iPhone 4, iPhone 4过渡到iPhone 5, iPhone 5过渡到iPhone 6,苹果公司都需要想办法来解决上述的兼容问题。


    为了运行之前的App,引入一个新的概念point(点)。点这个概念在iOS开发中十分重要,而非开发者很少关注。iPhone 4屏幕尺寸继续保持320 x 480,不过单位并非是像素,而是点。


    在iPhone 3GS中,1个点等于1个像素。也就是说,点跟像素可以直接互换。

    在iPhone 4中,1个点等于2个像素。


    iPhone 4和iPhone 3GS的屏幕尺寸实际上是一样的,都是3.5英寸。同样一个点,实际上看起来是一样的。只是iPhone 4在单位英寸上像素更多,看起来更细腻。


    开发iOS的时候,使用点作为基本单位会更加方便。列表对比

    这里的屏幕模式可以初步理解成,一个点等于多少个像素。2x,就是1个点等于2个像素。


    总结一下单位

    手机屏幕的物理长度,使用英寸作为单位。比如iPhone 4屏幕是3.5英寸,iPhone 5 是4英寸,iphone 6是4.7英寸,这里的数字是指手机屏幕对角线的物理长度。


    屏幕像素,比如iPhone 3GS屏幕是320 x 480像素,iPhone 4是640 x 960像素,这里的像素可以想象成屏幕上真正用来显示颜色的发光小点。


    点,开发App时候使用的单位,是一个虚拟的单位,并非实际存在的,因此点有时也叫虚拟点。点这个单位,用于屏蔽各个屏幕设备的不同,兼容以前的程序。


    每英寸有多少个像素,称为ppi(pixel per inch)。我们可以简单算算,iPhone 4是640 x 960像素,对角线就是1154像素,除以3.5英寸,应该是330ppi。而官方给出的数字是326ppi。当像素太密,超过300ppi的时候,人眼也就不能区分出每个像素。因此iPhone 4的屏幕叫作Retina显示屏。Retina在英文中,是视网膜的意思。


    iPhone 4之后(x, y, width, height) = (20, 30, 40, 50),就表示高度为40个点,宽度为50个点,放在(20, 20)个点的位置。这种处理方法,将之前以像素作为单位自动转换成以点作为单位,使得iPhone 3GS的应用程序,不用修改也可运行在iPhone 4上面。


    文字,颜色等是矢量数据,放大不会失真。原有的iPhone 3GS程序,在iPhone 4上面运行,文字显示也十分清晰。


    而图片并非矢量数据,处理方式有所不同。假设图片 example.png,大小为 30 x 40像素(这里的单位是像素,数字图片的单位通常都为像素)。当这张example.png在iPhone 3GS和iPhone 4中使用时候,都占据屏幕上30 x 40个点。而因为iPhone 4中1个点等于2个像素,也就是30 x 40像素的图片,占据了60 x 80像素的屏幕,因此这图片在iPhone 4中看起来就会模糊。


    开发的时候,为使得图片清晰,需要进行图片适配。这时需要准备两张内容相同的图片,放在同一目录下。

    example.png      // 30 x 40像素
    example@2x.png   // 60 x 80像素

    当程序中使用example.png的时候,会根据屏幕模式自动选择对应的图片。屏幕1x模式,就会选择example.png, 2x模式就会优先选择example@2x.png,假如example@2x.png不存在,就选择example.png。


    图片跟屏幕一样,也有1x模式,2x模式。在iPhone 6 Plus中,还出现3x模式,原理是一样的。


    当iPhone 4选中example@2x.png的图片,就会生成一张大小为30 x 40个点,2x模式的图片。这个时候,图片看起来就会很清晰了。而没有适配的旧程序,example@2x.png不存在,就选中example.png,生成大小为30 x 40个点,1x模式的图片,看起来比较模糊。但它们占据的屏幕点数是一样的。


    iPhone 5

    2012年,苹果发布iPhone 5。我们将所有机型对比,依然采用点作为单位。

    跟iPhone 4做比较, iPhone 5的宽度保持不变。高度增加568 - 480 = 88个点。


    在iOS开发中,44这个数字比较特殊。iOS界面指南写着,人类的手指有一定大小,点击区域低于44个点的时候,就难以点中。44的两倍就是88。


    当原有程序没有适配iPhone 5的时候,也可以正常运行,但多出来的88个点将会将会被自动均分为上下两部分,使得上下出现黑边。我找不到好看的图片。

    那么怎样才能告诉iOS系统,应用程序已经适配了iPhone 5呢?在这里,我们先扯开一下,谈一下启动图片。


    点击主屏幕的图标,进入App的时候,会立即显示一张图片,这张图片就是启动图片(Launch Image)。App在正式启动的时需要做一些初始化处理,这通常比较费时。先出现启动图片,可以使用户觉得系统立即有响应,减少等待的焦虑感。


    每个机型,比如同时支持iPhone和iPad的程序,需要分别为iPhone跟iPad指定启动图片。当旧的iPhone 4的程序,运行在iPhone 5上面,没有iPhone 5的启动图片,就采用兼容模式,上下留黑边。当为iPhone 5指定了新的启动图片,系统就认为这个应用程序是已经适配了iPhone 5的,上下就不会留黑边了。下面是微信启动图片,应该都很熟悉了。

    微信启动图片中出现的那个地球,叫蓝色弹珠(The Blue Marble),是在1972年12月7日由阿波罗17号太空船的船员所拍摄的。这张照片当年很震撼,是普通人第一次可以通过照片直接看到地球的全貌。见问题为什么微信启动界面的地球图片没有转到中国这部分?这是否有损用户体验?


    微信的启动图,为适配iPhone 5,相比与iPhone 4, 很明显狭长了。


    典型iPhone应用程序(游戏除外),很多是上面一个导航栏,下面一个工具栏或者标签栏, 中间一大块用于显示的内容区。iPhone 5拉长了,对于程序的适配,也不算麻烦,内容区的内容基本是动态生成的。适配时候可以简单上下不变,中间的内容区拉长就行了。注意,导航栏和工具栏的高度也是44个点。下面是同一程序,在iPhone 4跟iPhone 5的对比。

    AutoLayout

    到了这个时候,传统绝对定位的弱点就显露出来了。这时iPhone按照点作为单位,已经出现了两种不同尺寸的屏幕,算上iPad, 就有3种尺寸(有些App可以同时兼容iPhone和iPad,称为Universal)。


    从iOS 6系统发布后,iOS开发中可以采用一种AutoLayout的技术。AutoLayout就像网页一样,指定View,Button,Text之间的相对位置,比如靠左多少,靠右多少,居中多少等等。举个例子,像下面的简单布局。

    假设左上角的区域为view1, 右上角的区域为view2, 下面的区域为view3。AutoLayout会说:

    view1.left = 20               // View1的左边距离边界20个点
    view1.top = 20                // View1的上边距离边界20个点

    view2.right = 20              // View2的右边距离边界20个点
    view2.top = 20                // View2的上边距离边界20个点
    view2.left = view1.left + 20  // View2的左边距离View1右边20个点
    view2.width = view1.width     // View1的宽度等于View2的宽度
    view2.height = view1.height   // view1高度等于view2高度

    view3.left = view1.left       // view3的跟view1左对齐
    view3.right = view2.right     // view3跟view2右对齐
    view3.top = view1.bottom + 20 // view3的上边距离view1下边20个点
    view3.bottom = 20             // view3下边距离边界20个点
    view3.height = view1.height   // view3高度等于view1高度


    指定上面的约束条件后,AutoLayout就会自动算出对应的布局。上面我写得比较繁琐,事实上很多操作都是可以使用鼠标拖拉来指定的,并不一定需要使用代码。但就算用代码,也有简写的方法。下面是在xib中,拖拉鼠标指定约束时的界面。

    而绝对定位,会直接说

    view1.frame = (x1, y1, width1, height1)
    view2.frame = (x2, y2, width2, height2)
    view3.frame = (x3, y3, width3, height3)


    绝对定位并非指定约束条件,而是开发者自己来精确指定View,Button, Text等的实际坐标大小。

    对于一个屏幕,绝对定位可能跟AutoLayout的区别不算大,甚至绝对定位会更方便些。但当需要同时适配多个屏幕,AutoLayout根本不需要更改。而绝对定位就需要根据屏幕大小,一个个算出来。比如横屏,在AutoLayout下面,就自动变成。

    这里不过是3个控件的布局,当出现的控件数越多,屏幕尺寸越多,AutoLayout的优势就显露出来了。另外AutoLayout有个好处是容易支持多语言,不同语言下,同一个意思文字的长度是不同的,使用AutoLayout也可以自动适配。


    在iOS 6的时候,AutoLayout还比较少人使用,当时屏幕尺寸还比较少。iOS 7的时候,就开始很多人使用了。而到现在iOS 8了, 更加上iPhone 6, iPhone 6 Plus需要适配,AutoLayout大势所趋,不用不行了。


    iPhone 6, iPhone 6 Plus

    2014年,iPhone 6, iPhone 6 Plus发布后,情况又有新的变化。再次比较所有iPhone机型。

    屏幕尺寸再度分裂。但是我们比较iPhone 5 跟 iPhone 6的宽高比例。

    可以看出,iPhone 6跟iPhone 5虽然屏幕尺寸改变了,但是它们的比例是不变的。都是 9 ÷ 16 = 0.5625 的屏幕。


    当旧的iPhone 5程序运行在iPhone 6上面,假如没有经过适配。旧程序自动等比放大,铺满新手机,旧程序也可以正常运行。这种方案可算是自动适配。但因为旧程序拉伸了,整体看起来有点虚,也不能更好利用大屏空间。


    当需要开发者手动适配的时候,跟iPhone 4过渡到iPhone 5一样,在新程序中,指定一张新的启动图片。当指定了启动图,屏幕分辨率就已经变成应有的大小,这时候利用AutoLayout进行布局,同一份代码,就可以支持多个机型。新手机的屏幕更大,有更多的虚拟点,可以显示更多的内容。


    值得注意一点是,iPhone 6 Plus。它的宽高是414 × 736个点,3x模式,理想上来说,应该有1242 × 2208像素。但iPhone 6 Plus的实际像素是 1080 × 1920,是比理想值要少一点的。iPhone 6 Plus的处理方式是将程序整体稍微缩小一点。分辨率很高,这点区别,实际上也看不出来。这样处理,可以使得44个点的点击区域约束,在物理上的真实长度,基本保持不变。


    由分析可以看到,慢慢的为了适配多个机型,程序的启动图片也逐渐增多,为解决这个问题。iOS之后,可以使用xib来搭建启动界面,这样就可以同一个启动界面,适配多个机型,减少启动图片占用的空间。


    建议

    1、以后的应用程序,都使用AutoLayout, 不要再用绝对定位。

    2、使用类似网页的方式来设计界面。

    3、设计师好,程序员也好,尽量使用点这个单位进行思考,而不要使用像素。比如,你需要做44 x 66个点的按钮,2x模式,就乘以2, 3x模式就乘以3。这样的思考方式可以大致估计到真实的物理长度。44个点,就是手机上导航栏,工具栏的高度。假如用像素思考,容易使得做出的图片过大或者过小。

    4、非矢量素材,就可以做尺寸最大的,之后再进行缩小。比如你需要兼容3x的屏幕,就直接做最高那种图片。

    5、而当使用Flash之类的矢量工具来做素材的时候,应该直接做点那个尺寸。比如44 x 66个点的按钮。就建立一个44 x 66的场景。之后再导出成2倍图,3倍图,因为矢量放大不失真。不要建立一个3x的场景,导出成大图片,再进行缩小,这样就容易失真。更理想的是直接使用矢量图。

    6、假如是那种导航栏,工具栏之类的背景图,需要横跨整个屏幕。可以只切一小块,让程序拉伸,拉伸方式是保持两边的像素不动,只拉伸最中间的一列像素。需要拉伸的话,横方向就不要出现一些渐变色。

    7、按钮的点击区域,不应该少于44像素,就算按钮的图片看起来比较小,也应该使得点按钮周围的透明区也有反应。

    8、可以按照你当前最方便测试机子的型号来做一些主要预览图,效果图。比如你手头有iPhone 5,可以按照iPhone 5的尺寸,320 x 568个点,需要兼容iPhone 6 Plus,就使用3x的模式。这样方便将图片放进手机里面看实际的效果。有多个测试机,就选较大的,之后再进行一些细调。假如支持iPhone 6 Plus的横屏模式,需要另外处理。

    9、上面说的是应用的处理方式,游戏会有些特殊。现在很多游戏,按照1136 x 768的像素尺寸来设计场景,这样可以同时兼容iPad和iPhone,并只使用一份图。iPad 1x模式下尺寸是1024 x 768像素,iPhone 6在2x模式下,是1136 * 640。这种尺寸,可以简单将场景居中显示,各自将场景拉伸到最大。


    展开全文
  • 下载地址 : ... 核心类 // // UIImage+AutoResize.h // CommonToolLib // // Created by to2dot@qq.com on 15/2/2. // Copyright (c) 2015年 todot. All rights reserve
  • 1x,2x就是用于非Retain屏幕和Retain屏幕,3x现在用于iPhone6 Plus,在iPhone实际开发中,只有iPhone4 是非Retain屏幕,市场占有率很低,因此在切图时,只切@2x和@3x图片即可。以iphone 6做UI为例,如果图片大小为...
  • 本文提供的方法可以只需要一套@3x图片兼容所有iOS设备和系统(当然了,这里指大于4.0的系统,4.0的系统还有人用么),本方法采用替换UIImage的一个类方法和UIImageNibPlaceholder的一个实例方法来实现的(其实就是...
  • 使用initWithContentsOfFile可以优先选择3x图像,而不是2x图像。 NSString *path = [[NSBundle mainBundle] pathForResource:@"smallcat" ofType:@"png"]; UIImage *image = [[UIImage alloc]...
  • @2x @3x 什么时候用?先看各个机型数据图,以这个为标准. 对照的pt / px分辨 就是 尺寸(point)/分辨率(像素点)我们先看何为pt pxpt就是point,是印刷行业常用单位,等于1/72英寸。(具有实际度量值) px就是表示pixel,...
  • 现在很多APP设计师小白都会稀里糊涂的在解读这些缩放1倍,扩大2倍或者说扩大1.5倍 等等...假设有两张图片名为:正确的命名方式应该是这样test_t@2x.png 、test_t@3x.png 这是对于ios 切图来说的。 iphone 4 5 6是采用
  • 启动图片测试环境:Xcdoe 9iOS11这篇文章,主要是解决公司发布多个马甲app,启动图片图片放到了项目普通文件夹下的情况,文章可以参考我之前写的。 如果公司只是固定的产品,那直接放到Images.xcassets 下或者使用...
  • iOS项目的添加启动图片有三种方式: (1) 放到工程 Images.xcassets 文件夹下的中的【LaunchImage】图片集合中。 (2) 放到工程下的普通文件夹中。 (3) 在LanunchScreen.xib中设置启动图片 详解介绍方式一,通过...
  • 如何兼容android、ios的刘海屏 描述 刘海屏也有其它叫法:凹凸屏、头凹屏、覆盖屏、挖孔屏等等,这里统一按...首先借鉴下网络的手机图片展示下,苹果IOS的还好,但是安卓的厂商有小米、华为、oppo、vivo等都相应...
  • (译)cocos2d-x跨android&ios平台开发入门教程 免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本...
  • iOS8已经正式发布,为了适配新的机型和iOS8,我们需要新的@3x图片。现在有两种方法 第一种 http://www.cocoachina.com/ios/20140923/9727.html 这是最早的一篇,限制条件有限制。很多美工只有PS6,我自己还...
1 2 3 4 5 ... 20
收藏数 71,133
精华内容 28,453
关键字:

2x 3x图片 ios