写给设计师的iOS前端教程(三)UIImageView

一、UIImageView出场

说完了文字组件UILabel,接下来我们有请图片组件 -- UIImageView出场了。翠花,上代码!

    UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 160, 200, 200)];
    myImageView.image = [UIImage imageNamed:@"test_image"];
    myImageView.contentMode = UIViewContentModeScaleAspectFill;
    myImageView.layer.cornerRadius = 10;
    myImageView.layer.masksToBounds = YES;
    [self.view addSubview:myImageView];

二、代码详解

1、赋值、坐标、尺寸(必选)

    UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 160, 200, 200)];

看过上一篇的同学应该能看懂这句话的意思了,就是说,在x坐标20,y坐标160的地方,放一个宽200,高200的图片。

2、图片地址(可选)

    myImageView.image = [UIImage imageNamed:@"test_image"];
2.1 图片怎么放到项目里?

你做好的图片要放在项目的什么地方了呢?

Xcode的文件目录

在很久很久以前,图片还是散落在项目的各个地方的,找起来很麻烦。后来苹果大人说了,都给我待一块儿去!于是,所有的图片都放在Assets.xcassets文件里了。

添加图片或图片文件夹

上图的第二列,下方有个加号,点击后可以添加图片组(New Image Set),或者文件夹(New Folder),名字都可以自己改的。

每个图片组包含三个图片:

  • 1x的图片,是给iPhone 4出道之前那些老前辈用的。这年头,连iPhone 4s都算老古董了,咱们直接忽略吧。
  • 2x的图片,是给iPhone 4到iPhone 6这些retina屏幕用的。这些是主力,咱们得伺候好这些主儿。
  • 3x的图片,是给iPhone 6 plus用的。由于iPhone 6 plus用的人不是太多,就算用2x来显示效果也还可以接受,所以咱们就省点功夫,不做3x的图片了。

直白的说,我们只用到2x的图片,1x和3x都不用管了。

图片的名称要不要加上 @2x 呢?比如「abc@2x.png」。都可以,建议是要加上。

如果不加,你要手动添加图片组(New Image Set),再把图片拖到2x对应的虚线框里边。

如果加上的话,把图片拖到目录里,系统就会自动添加图片组(New Image Set),图片组的名字就是图片名称,而且2x的图片会待在2x的虚线框里,省事很多。

2.2 图片名还是图片组名?

考你个问题:图片的文件名叫做abc.png,图片组(Image Set)的名称叫做def,那在代码里用哪个名字呢?

答案是用图片组的名称 myImageView.image = [UIImage imageNamed:@"def"];

从个人习惯的角度,我会把图片的文件名和图片组的名称保持一致,谁让我是表里如一的人呢?

图片组起名字的时候要注意:

  • 不要用拼音,太low了;
  • 不要用大写字母,全都小写;
  • 不要用空格,中划线,要用下划线;

有些朋友喜欢用大小写,驼峰式命名,例如 myGirl。最好别这样,不是 Xcode 不支持,是 Android 不支持,为了保持两边文件名统一,就都用小写 + 下划线吧。

2.3 坑爹的文件夹

再考你,请听题:

  • 同一个文件夹里,可以图片组的名称可以重名吗?
  • 不同的文件夹里,图片组可以重名吗?
  • 在文件夹里的图片组,程序调用的时候需要加上文件夹(目录)吗?

答案:

  • 同一个文件夹里,当然不能重名啦。
  • 可以。
  • 不用。

这就引出一个有意思的问题了:要是不同的文件夹里有重名的图片组,程序上会选择哪个呢?坑爹的是,我也不知道,没找到规律(……摊手)。

所以,不管什么文件夹,整个项目里,图片都不要重名,不管是iOS还是Android,都是如此。

3、图片的显示模式(可选)

    myImageView.contentMode = UIViewContentModeScaleAspectFill;

contentMode是个很容易被工程师忽略,但是对设计师很重要的属性。

你做的图片有个尺寸,在代码里放图片的容器也有一个尺寸,这两个尺寸并不总是相等的。这好比你把一张图片拖到Photoshop的画布了,图片和画布的宽高比例不一致。那你要怎么办呢?有些奇葩的方式就不说了,常规的,无非是「拉、补、裁」三种:

  • UIViewContentModeScaleToFill:不管图片的比例,把图片拉伸来适应容器;
  • UIViewContentModeScaleAspectFit:就像你在4:3的电视机上看16:9的电影,画面没有被拉伸,但是上下都会加上一个黑边;
  • UIViewContentModeScaleAspectFill:先等比例拉伸,再把多出来的部分裁掉;

想想自己做的图片被暴力拉伸,实在太恐怖了,设计师肯定不能忍受。但是很可惜,contentMode的默认值就是这样的。你也不愿意在上下/左右补两条黑边吧?所以最合理的方式就是「裁」了。

以后,你要是看到图片被拉伸了,不用问阿贵,肯定是忘了设置contentMode。你只要加上一句myImageView.contentMode = UIViewContentModeScaleAspectFill; 就OK啦!

4、圆角(可选)

    myImageView.layer.cornerRadius = 10;
    myImageView.layer.masksToBounds = YES;

这两句是配套的,第一句是设置了圆角的半径,第二句是说:「我确定一定以及肯定要多余的部分裁掉」。

5、显示出来(必选)

    [self.view addSubview:myImageView];

这行代码是老相识了,就是把图片添加到视图里。只有加了这句话,你的凡胎俗眼才能看得见它。


喜欢这篇文章吗?点击这里 查看本系列的更多文章。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • 许多UIView的子类,如一个UIButton或一个UILabel,它们知道怎么绘制自己。迟早,你也将想要做一些自...
    shenzhenboy阅读 1,611评论 2 8
  • 转自:https://www.jianshu.com/p/10b2323f502e 1、禁止手机睡眠 [UIApp...
    aggie1024阅读 2,628评论 0 6
  • iOS 用imageWithContentsOfFile 加载图片图片名不带@2x和@3x,会找不到图片,问什么不...
    杨大虾阅读 5,542评论 1 3
  • 这次换了构图思路,简约,薄涂。 只用到三种颜色:熟褐普蓝土黄。 湿画法为主。 纸巾吸收部分云团,留出树木与天相连的...
    手绘者焕新阅读 352评论 2 8
  • 数据类型 Python中的变量不需要声明。每个变量在使用前必须赋值,变量赋值以后才会被创建Numbers / St...
    云木杉阅读 532评论 0 0