分页、NSTimer、屏幕适配、Autolayout、VFL

分页

- 只要将UIScrollView的pageEnabled属性设置为YES,UIScrollView会被分割成多个独立页面,里面的内容就能进行分页展示

- 一般会配合UIPageControl增强分页效果,UIPageControl常用属性如下

// 一共有多少页

@property(nonatomic) NSInteger numberOfPages;

// 当前显示的页码

@property(nonatomic) NSInteger currentPage;

// 只有一页时,是否需要隐藏页码指示器

@property(nonatomic) BOOL hidesForSinglePage;

//  其他页码指示器的颜色

@property(nonatomic,retain) UIColor *pageIndicatorTintColor;

//  当前页码指示器的颜色

@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;

NSTimer

- NSTimer叫做“定时器”,它的作用如下

- 在指定的时间执行指定的任务

- 每隔一段时间执行指定的任务

调用下面的方法就会开启一个定时任务

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget

selector:(SEL)aSelector

userInfo:(id)userInfo

repeats:(BOOL)yesOrNo;

每隔ti秒,调用一次aTarget的aSelector方法,yesOrNo决定了是否重复执行这个任务

通过invalidate方法可以停止定时器的工作,一旦定时器被停止了,就不能再次执行任务。只能再创建一个新的定时器才能执行新的任务

- (void)invalidate;

- 解决定时器在主线程不工作的问题

NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(next) userInfo:nil repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

屏幕适配的发展历史

- iPhone3GS\iPhone4

      - 没有屏幕适配可言

      - 全部用frame、bounds、center进行布局

      - 很多这样的现象:坐标值、宽度高度值全部写死

UIButton *btn1 = [[UIButton alloc] init];

btn1.frame = CGRectMake(0, 0, 320 - b, 480 - c);

- iPad出现、iPhone横屏

       - 出现Autoresizing技术

             - 让横竖屏适配相对简单

             - 让子控件可以跟随父控件的行为自动发生相应的变化

             - 前提是:关闭Autolayout功能

             - 局限性

                     - 只能解决子控件跟父控件的相对关系问题

                     - 不能解决兄弟控件的相对关系问题

- iOS 6.0(Xcode4)开始

     - 出现了Autolayout技术

    - 从Xcode5.0(iOS 7.0)开始,开始流行Autolayout

设备分辨率


什么是Autolayout

- Autolayout是一种“自动布局”技术,专门用来布局UI界面的

- Autolayout自iOS 6开始引入,由于Xcode 4的不给力,当时并没有得到很大推广

- 自iOS 7(Xcode5)开始,Autolayout的开发效率得到很大的提升

- 苹果官方也推荐开发者尽量使用Autolayout来布局UI界面

- Autolayout能很轻松地解决屏幕适配的问题

代码实现Autolayout

- 代码实现Autolayout的步骤

     - 利用NSLayoutConstraint类创建具体的约束对象

     - 添加约束对象到相应的view上

- (void)addConstraint:(NSLayoutConstraint *)constraint;

- (void)addConstraints:(NSArray *)constraints;

- 代码实现Autolayout的注意点

   - 要先禁止autoresizing功能,设置view的下面属性为NO

   - view.translatesAutoresizingMaskIntoConstraints = NO;

   - 添加约束之前,一定要保证相关控件都已经在各自的父控件上

   - 不用再给view设置frame

NSLayoutConstraint

- 一个NSLayoutConstraint对象就代表一个约束

- 创建约束对象的常用方法

+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

- view1 :要约束的控件

- attr1 :约束的类型(做怎样的约束)

- relation :与参照控件之间的关系

- view2 :参照的控件

- attr2 :约束的类型(做怎样的约束)

- multiplier :乘数

- c :常量

添加约束

- (void)addConstraint:(NSLayoutConstraint *)constraint;

- (void)addConstraints:(NSArray *)constraints;

- 注意

- 一定要在拥有父控件之后再添加约束

- 关闭Autoresizing功能

view.translatesAutoresizingMaskIntoConstraints = NO;


使用代码实现Autolayout的方法2 - VFL

- 使用VFL创建约束数组

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format

options:(NSLayoutFormatOptions)opts

metrics:(NSDictionary *)metrics

views:(NSDictionary *)views;

* format :VFL语句

* opts :约束类型

* metrics :VFL语句中用到的具体数值

* views :VFL语句中用到的控件

- 使用下面的宏来自动生成views和metrics参数

NSDictionaryOfVariableBindings(...)


 使用代码实现Autolayout的方法3 - Masonry

- 使用步骤

- 添加Masonry文件夹的所有源代码到项目中

- 添加2个宏、导入主头文件

// 只要添加了这个宏,就不用带mas_前缀

#define MAS_SHORTHAND

// 只要添加了这个宏,equalTo就等价于mas_equalTo

#define MAS_SHORTHAND_GLOBALS

// 这个头文件一定要放在上面两个宏的后面

#import "Masonry.h"

- 添加约束的方法

// 这个方法只会添加新的约束

[view makeConstraints:^(MASConstraintMaker *make) {

}];

// 这个方法会将以前的所有约束删掉,添加新的约束

[view remakeConstraints:^(MASConstraintMaker *make) {

}];

// 这个方法将会覆盖以前的某些特定的约束

[view updateConstraints:^(MASConstraintMaker *make) {

}];

- 约束的类型

1.尺寸:width\height\size

2.边界:left\leading\right\trailing\top\bottom

3.中心点:center\centerX\centerY

4.边界:edges

自动布局的核心计算公式

- 自动布局的核心计算公式

obj1.property1 =(obj2.property2 * multiplier)+ constant value


VFL示例

- H:[cancelButton(72)]-12-[acceptButton(50)]canelButton宽72,acceptButton宽50,它们之间间距12

- H:[wideView(>=60@700)]wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)

- V:[redBox][yellowBox(==redBox)]竖直方向上,先有一个redBox,其下方紧接一个高度等于redBox高度的yellowBox

- H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|水平方向上,Find距离父view左边缘默认间隔宽度,之后是FindNext距离Find间隔默认宽度;再之后是宽度不小于20的FindField,它和FindNext以及父view右边缘的间距都是默认宽度。(竖线“|” 表示superview的边缘

VFL的使用

- 使用VFL来创建约束数组

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;

- format :VFL语句

- opts :约束类型

- metrics :VFL语句中用到的具体数值

- views :VFL语句中用到的控件

- 创建一个字典(内部包含VFL语句中用到的控件)的快捷宏定义

NSDictionaryOfVariableBindings(...)

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

推荐阅读更多精彩内容