美文网首页
图片加载@2x与@3x

图片加载@2x与@3x

作者: e16fb2d7b631 | 来源:发表于2018-08-09 16:38 被阅读16次

    一、图片格式@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 = [[UIImageViewalloc] initWithFrame:CGRectMake(80,80,180,180)];

    imageView.backgroundColor = [UIColorblueColor];

    //只有test@2x与test@3x图片

    //4s 5 5s 6 6s 会自动加载test@2x图片

    //6Plus 6sPlus 会自动加载test@3x图片

    imageView.image = [UIImageimageNamed:@"test"];

    [self.view addSubview:imageView];

    }

    PS:这种方法可以加载到逻辑路径中的资源 也可以加载到Assets.xcassets中的资源,而且会根据设备自动匹配@2x和@3x图片。

    方法二:

    -(void)setImageView2{

    //此处的路径是物理路径如果是逻辑路径是获取不到资源的

    //这里填写test@2x或者test@3x都可以(只要这个文件在wwwwww这个文件夹真实存在即可),主要是获得这个物理路径。

    //获得到这个路径之后 后边才会根据设备自动加载@2x图片或者@3x图片。

    NSString*path = [[NSBundlemainBundle] pathForResource:@"wwwwww/test@2x"ofType:@"png"];

    NSLog(@"path = %@",path);

    //因为www是逻辑路径,用此方法是加载不到这个文件的

    NSString*path1 = [[NSBundlemainBundle] pathForResource:@"www/test@2x"ofType:@"png"];

    //所以path1的值为null;

    NSLog(@"path1 = %@",path1);//path1 = null;

    UIImageView* imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(80,80,180,180)];

    imageView.backgroundColor = [UIColorblueColor];

    //4s 5 5s 6 6s 会自动加载test@2x图片

    //6Plus 6sPlus 会自动加载test@3x图片

    imageView.image = [UIImageimageWithContentsOfFile:path];

    [self.view addSubview:imageView];

    }

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

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

    -(void)setImageView3{

    //从此也可以看出逻辑路径下的资源文件的路径并没有真正存在 都是在工程的 根目录下app/资源文件

    UIImageView* imageViewImage = [[UIImageViewalloc] initWithFrame:CGRectMake(40,40,100,100)];

    imageViewImage.backgroundColor = [UIColorblueColor];

    //下面两种写法都没有写成:test/inTest/inTest 这种物理路径的方式,其实写成这样是识别不到inTest.png文件的 因为路径并不存在

    #if 1

    NSString* mainPath = [[NSBundlemainBundle] resourcePath];

    NSString* path = [NSStringstringWithFormat:@"%@/inTest",mainPath];

    #else

    NSString* path = [[NSBundlemainBundle] pathForResource:@"inTest"ofType:@"png"];

    #endif

    UIImage* image = [UIImageimageWithContentsOfFile:path];

        imageViewImage.image = image;

    [self.view addSubview:imageViewImage];

    }

    相关文章

      网友评论

          本文标题:图片加载@2x与@3x

          本文链接:https://www.haomeiwen.com/subject/jvdcbftx.html