IOS之UIKit_Day19

Day19

回顾:

1. UIView的内部布局

          VC可以对直接子视图布局,但是不能对视图的内部直接布局,所以view必须就有自身 布局的能,通过重写UIView的LayoutSubView方法实现当需要布局的时候,方法执行的顺序

a.VC的viewWillLayoutSubView

b.View的layoutSubView

d.VC的ViewDidLayoutSubView

2. Autoresizing布局

          利用等比变换的原则,保持视图与父视图的变换比率相同,使用简单,但是使用的效果有限,有时还需要结合手写代码结合实现布局。

3 AutoLayout自动布局

          理念:使用“约束”描述位置,具体的坐标有系统根据约束计算出来

          实现:

                   方法一:在storyboard中利用配置项

                   方法二:使用代码的方式创建约束

 

 

今天:

1.Auto Layout代码创建约束

          step1:创建约束对象

                   NSLayoutConstraint(API )

          step2:: 将约束添加到父视图中

          方法一:使用万能公式:

      + (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 + constant".

                                      如button.left=self.view.left*0+20;

                                       button.right=self.view.width*1+(-20);       

          使用注意事项:translateAutoresizingToConstraints这个属性默认值是YES,这个属性代表将视图默认自带的Autoresizing特性是是否自动转换为对应的约束,既然使用代码来创建约束,那么就不要让系统自带的转换过来的约束影响添加的自定义约束,所以该属性要设置为NO 为了保证效果,可以将视图以及视图的父视图的该属性设置为NO即可。

          创建约束对象以后  一定要加到父视图当中

          方法二:一次性创建多个约束,使用VFL(Visual Format Language

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

          metrics参数

                    用于指定VFL字符串中可以替换的值,是一个字典类型

                    如:NSDictionary *metrics = @{@"left":@20,@"space":@10,@"right":@20};

          NSDictionaryOfVariableBinding()函数

                    NSDictionary *dictionary = NSDictionaryOfVariableBindings(b1,b2,b3);

                    生成的字典如下:

                    @{@"b1":b1,@"b2":b2,@"b3":b3}

 

                   特点:功能强大

  1.4 如何写VFL字符串

          |  代表倒父视图边界的距离

          V: | 垂直方向的高度距离上边界

          []:代表子视图(控件)

     ():代表一个条件(==  >= <=)==时可以省

          —代表的是间距  默认值是8

          —XXX—代表间距是多少

如:    |-20-[button1]-10-[button2(button1)-10-[button3(button1)]-20-|

          V:|-20-[button1]

 

2. 动画(Animation) 

          2.1 是什么?

          “帧动画”:一帧是一张静态你的图片,一般情况下,一秒达到25帧的时候,人眼就分不清楚图片的切换过程了,就产生了连续的效果。

          2.2 IOS中的动画

                   UIImage类:自带一些方法,可以做简单的动画

                   NSTimer类:间隔指定的时间,产生切换的效果

                   UIView类:本身提供的功能

                            底层的core Animation提供了支持动画的底层属性

                   在IOS7中增加了一些动画功能

                   UIKit Dynamic 动力

                   Motion Effects 特效

                   Sprite Kit(corde 2D引擎)

 

3. UIImage类动画:

          //durantion 播放一组图片用的时间

UIImage *image = [UIImage animatedImageNamed:@"ship-anim" duration:1*5/30];

    self.imageView.image = image;

 

4. NSTimer

方法一:定时器创建后就会自动启动

               self.timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSomething:) userInfo:nil repeats:YES];

方法二:定时器创建之后,就需要代码启动

               self.timer=[NSTimer timerWithTimeInterval:1 target:self    selector:@selector(doSomething:) userInfo:nil repeats:YES];

    //启动代码

             [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSDefaultRunLoopMode];

          关闭定时器: [self.timer invalidate];

 

 匀速运动

          当前值=开始值+当前帧数*(结束值-开始值)/(帧率*动画时长)

          这一个值可以是center  transform frame alpha

 变速运动:

          公式:当前值=上一次的值+(目标值-上一次值)*渐进因子

5. UIView 动画:真正的动画有专门的API

          5.1 是什么?

          有UIKit专门制作的动画API 这些API的底层对Core Animation的封装 既可以实现动画,不应再计算每一帧来实现动画的效果

          5.2 制作动画的步骤:

          step1:设置需要动画视图的初始值

          step2:给UIView类发消息 告诉UIView类需要什么样的动画

          step3:将动画结束的状态写入到一个Bloack

          5.3 动画的高级选项:

          先慢后快再慢

                   UIViewAnimationOptionCurveEaseInOut 

          越来越快         

           UIViewAnimationOptionCurveEaseIn 

      越来越慢            

           UIViewAnimationOptionCurveEaseOut 

     匀速           

           UIViewAnimationOptionCurveLinear

     动画重复

           UIViewAnimationOptionRepeat 

     反着执行动画,要配合Repeat选项                 

           UIViewAnimationOptionAutoreverse

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。