• 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

     

     

     

  • 相关阅读:
    EFCore数据库迁移命令
    EF基本操作
    EF执行存储过程
    [vue]element-ui使用
    [vue]vue-router的使用
    [vue]使用webpack打包
    [vue]插槽与自定义事件
    [vue]计算属性
    [vue]axios异步通信
    [vue]组件
  • 原文地址:https://www.cnblogs.com/katydid/p/4319561.html
Copyright © 2020-2023  润新知