iOS-学习笔记-UI-第十六天

来源:互联网 发布:电话线插网络 编辑:程序博客网 时间:2024/05/18 19:37

内容列表:

1.输入坐标系

2.触控 UITouch

3.布局

    3.1 纯代码布局

    3.2 Auto Resizing 布局

    3.3 Auto Layout 布局

4.动画

    4.1 UIView

5.Core Animation

6.UIKit Dynamic 动力特效

7.通知

8.Search Bar

9.TMessage 大练习




今天

1. 深入坐标系(frame bounds center transform)

    1.1 frame属性

        a. 什么是frame属性

            类型:CGRect 结构体

            作用:该视图左顶点在父视图的坐标系中的位置,以及,该视图在父视图中占据的宽和高

        b. 直接修改了frame属性,其他属性会如何变化

            bounds:YES

            center:YES

            transform:NO

    

        c. 什么时候使用frame属性

            当需要把这个视图添加到父视图中,一定要设置frame属性

    1.2 bounds属性

        a. 什么是bounds属性

            类型:CGRect结构体

            作用:纪录了该视图自身的大小,以及自己坐标系左定点的基准

        b. 直接修改bounds属性,其他属性会如何变化

            frame:YES

            center:NO

            transform:NO

        c. 什么时候使用bounds属性

            当需要定位视图时,读取视图所属的父视图的大小时,那么就要用父视图的bounds属性获取大小

            当需要修改该视图内的子视图的位置时,可以通过修改视图的左顶点的基准值,实现子视图位置的偏移,实现移动的效果


    1.3 center属性

        a. 什么是center属性

            类型:CGPoint属性

            作用:描述该视图的中心点,在父视图坐标系中的位置


        b. 直接修改了center属性,其他属性会如何变化

            frame:YES

            bounds:NO

            transform:NO

        c. 什么时候使用center属性

            需要修改视图的位置,也就是位移时,经常选择修改center,尽量不使用修改transform来实现位移


    1.4 transform属性

        a. 什么是transform属性

            类型:CGAffineTransform结构体

            作用:描述该视图的变形情况

        b. 直接修改了transform属性,其他属性会如何变化

            frame:YES

            bounds:NO

            center:NO


        c. 什么时候使用transform属性

            需要修改视图的位移,旋转,缩放 状态时,可以修改transform属性


        


2. 触控(UITouch)

    2.1 是什么?

        是一个UITouch类型的对象,当用户触摸到屏幕时,本次的这个额触点数据转化而成的对象,有系统自动根据触碰动作生成的一个对象。

        手势对象就是基于UItouch的一个封装结果


     2.2 如果获取UITouch?

        需要自定义视图类,覆盖类中的指定的方法,方法的参数就是系统在捕获到触屏动作后,自动封装传入的UITouch对象

    2.3 有什么用?

        通过跟踪用户的触点轨迹,判断用户的意图,以此进行绘图,涂鸦,手写等操作


    2.4 怎么用?

        step 1:自定义一个视图类

        step 2:重写类中的方法即可

            touchesBegan:withEvent:手指接触视图时调用

            touchesMoved:withEvent:手指在视图上移动时调用

            touchesEndedLwithEvent:手指离开视图时调用


3. 布局(Layout)

    3.1 什么时布局?

        是指在一个视图上,如何摆放它的子视图(位置和大小)

    3.2 为什么要布局?

        因为屏幕大尺寸大小会随着一些情况而变化,如,横竖屏方向变换,设备型号不同等。。一旦屏幕尺寸发生变更,则坐标系就会变化,子视图在该坐标系中的位置就会与期待的位置不符,所以,当坐标系发生变化时,就需要重新布局各个子视图

    3.3 可能导致屏幕大小发生变化的原因

        a. 屏幕不同

        b. 屏幕方向不同

        c. 各种Bar

             NavigationBar:竖屏64 横屏52

            TabBar:高度 49

            ToolBar 44/32

        d. 状态栏

            隐藏

            特殊的状态栏

                来电时 绿色的状态栏

                录音时 红色的状态栏

                开启个人热点时 蓝色的状态栏

        e. 键盘

    3.4 如何布局?

        方法一:纯代码布局,古老的方法

            理念:当屏幕大小发生变化时,自动执行一段写好的代码,代码中重新计算视图的frame,从而达到在新的坐标系下重新定位的目的

                特点:功能强大,非常繁琐

        方法二:Auto Resizing以前的一自动布局技巧

            理念:纪录视图与父视图边缘的距离,并根据界面变化的比率,使用同等的变化来修改这个到边缘的距离

                特点:操作简单,功能有限

        方法三:Auto Layout最新的自动布局方法

            理念:将视图与视图之间的位置及大小,用多个约束纪录,当屏幕大小发生变化,系统会根据之前指定过的约束,重新计算frame

            特点:简单易用


        注意: 以上三种布局方式,选择其一使用,方法一和方法三绝对不要一起使用,但是方法一可以结合方法二一起使用

        


4 .纯代码布局

    4.1 理念:检测屏幕大小是否发成变化,通过代码的方式自己计算新的frame

    4.2 如何实现?

        当屏幕大小发生变化是,系统会自动执行控制器中的一些方法,如viewWillLayoutSubVIews,viewDidLayoutSubViews。

        所以,可以在这些方法中编写计算新的frame的数值的代码

        

        注意:使用纯代码方式布局时,一定要关闭AutoLayout,否则代码可能无效。


0 0