美文网首页
分页、NSTimer、屏幕适配、Autolayout、VFL

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

作者: Hevin_Chen | 来源:发表于2016-09-18 23:36 被阅读37次

    分页

    - 只要将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(...)

    相关文章

      网友评论

          本文标题:分页、NSTimer、屏幕适配、Autolayout、VFL

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