iOS 4:掌握AutoLayout

如何进行接口设计

  • 首先要考虑最终要实现的功能,满足此功能
  • 考虑到未来再重复使用此功能的伸缩性,传递对应的参数进去
  • 使外部使用此接口的方式,尽可能的简便,接口内部的实现对外界屏蔽
  • 检验使用此接口的细节,在接口内部的参数与方法命名上通俗易懂,例如:add、remove,imageName(覆盖,第二次调用时需要对前一次进行清除)等等

消息循环

  • 例如对于一个UIScrollView控件的多种属性修改,并不是设置了就立即调到相应的方法中进行修改,而是在一次循环中收集所有的修改,在没有外部干扰的情况下,方法结束后进行一次性的更改
  • 外部干扰,例如touchesBegan,这是UIView的共有属性

UIView的3种初始化方法

在学习swift的时候,一直以来清楚为什么会有initWithCoder的存在,现在清楚了。
  • init,会调用initWithFrame:(CGRect)frame。
  • initWithFrame:(CGRect)frame,传递frame参数来构造UIView。
  • initWithCoder:(NSCoder *)aDecoder,在使用xib\storyboard的时候调用,是对xib\storyboard文件的解析。在xib\storyboard文件中进行了控件的创建以及设置,initWithCoder相当于一个解析器。
  • 在这里讲一个对比的函数:awakeFromNib(storyboard的前身也是nib),字面意思是从Nib中醒来,与initWithCoder不同的地方在于:initWithCoder只是完成了控件的创建,awakeFromNib是在完成了连线的赋值之后进行调用;awakeFromNib,无论是自创建控件还是从xib\storyboard中创建,都会调用。
双击屏幕中心可以满屏播放.png

框架

  • 框架的升级问题:当一个框架进行了升级之后,之前的接口可能会发生改变,那么任何使用该接口的app可能会发生bug,那么现在问题来了,苹果更新的iOS系统,那么旧有的app都不能使用了吗?
  • 有时候敲代码的时候,会发现有些方法中间划了红线,这是被苹果遗弃的iOS旧系统中的方法,仍旧能用,但是苹果不推荐使用。
  • 在我们平常设计框架并以后更新的时候,在升级新接口的同时,也可以保留旧有的接口,增加关键字如下:
//objc
@property (nonatomic, strong) UIColor *otherColor NS_DEPRECATED_IOS(2_0,3_0);

NSTimer

  • 创建一个定时器
//objc
//创建了定时器,但是并未启动
[NSTimer timeWithTimeInterval:1.5 target:self selector:@selector(nextPage) userInfo:nil, repeats:YES];

//创建并默认启动了定时器
self。timer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval) target:(id) selector:(SEL) userInfo:(id) repeats:(BOOL)];

//启动定时器
[self.timer fire]
//关闭定时器
[self.timer invalidate]

  • 线程
    • 正常情况下,在单核机器中,一个app是运行在一个主线程中,但是当设置定时器以后,如果用户界面发生了交互,会暂时屏蔽定时器的走动。
    • 究其原因,是因为定时器的优先级较低,通过设置NSRunLoop mainRunLoop 通用模式,使其与UI有同层的优先级。

屏幕适配的发展历史,重要:AutoLayout

小码哥讲解了自动布局发展的历史,在iOS系统初期,使用的是代码的方式;中期使用了autoResizing方式;现在使用AutoLayout。但是AutoLayout是将代码简化到了属性的设置中,使得autoLayout比较方便,但是自定义控件使用autoLayout代码的方式仍旧特别麻烦。之前接触过autoLayout代码的设置方式,觉得自己天资愚笨,就放弃了,原来这个都不受大家待见。
  • 针对不同版本的操作系统 以及 不同大小的屏幕尺寸进行适配。
  • 使用AutoLayout之后,不推荐使用frame \ bounds \ center,有时设置会起作用,有时候并不起作用。忘掉frame,拥抱aotuLayout。
  • autoResizing与autoLayout的区别是:autoResizing只能对父子控件进行位置与大小设置,而autoLayout既可以作用于父子控件,也可以作用于兄弟控件,它可以作用于任何两个控件之间。
  • 使用autoResizing的前提是:需要关闭autoLayout功能。
  • autoLayout的核心概念:参照、约束。对于一个控件,给其一个参照的控件,然后在这两者之间设置约束。
  • 除了UIViewController中的控件可以拖线之外,控件间的约束也可以拖线,然后可以直观的对约束变量进行设置。

视网膜屏幕 retina高清屏幕

  • 像素与点的认识:点是面向程序员的,像素是面向用户的,像素与点之间是倍数关系,方便程序员进行多种iOS尺寸的设计。
Ember Library Mediator.png

UITextField

  • UITextField 的父类是 UIScrollView
  • UITextFied 中的长度设置: Less Than or Equal \ Equal \ Greater Than or Equal,当UITextField中的text会变动,设置Less Than or Equal 会设置最大的长度,在这个范围内随着text变动而缩小。
  • 例如:UIView中装着子控件UITextField,UIView随着UITextField中text的变化,而进行伸缩。设置UITextField与UIView底部的距离即可,也可以通过设置UIView的底部 = UITextField 的底部 + 20

tips

  • 有时候程序运行出现这样的BUG CUICatalog:Unvalid asset name supplied: (null),是因为在[UIImage imageNamed:name]传递的参数name = null
  • Masonry 第三方框架,使代码写约束的过程变得更加方便
  • drawRect方法,是控件共有的一种方法
  • UIView中自控件的动画设置,主意增加layoutIfNeeded
//objc
[UIView animateWithDurationn:2.0 animations: ^{
    [self.blueView layoutIfNeeded];
}];
  • arc4random_uniform(max) 方法产生一个随机值,不大于max
  • 让subviews数组中的所有对象都执行同样的方法
//objc
[self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新。目前,iOS系统版本已经更...
    VV木公子阅读 15,324评论 24 170
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,943评论 4 60
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • 数组在Kotlin中使用Array类来表示。下面巴拉一下Kotlin数组和Java数组的区别。Java中的数组通常...
    钉某人阅读 79,708评论 2 27
  • 真正难的是独处时仍存善念 01 前几天,小区业主微信群里,大家都在热火朝天的讨论着一件事,那就是隔壁单元的一位邻居...
    菀彼青青阅读 534评论 5 10