这是我参与「第四届青训营」笔记创作活动的的第6天
1 iOS App
1.1 main函数
初始化一个UIApplication实例以及一个AppDelegate代理
1.2 UIApplicationMain
main函数中,关键方法为UIApplicationMain,此方法的官方解释为
Creates the application object and the application delegate and sets up the event cycle.
创建application对象,和application的代理,设置事件循环
delegateClassName(委托类名):将在工程新建时实例化一个对象NSStringFromClass([AppDelegate class])
1.3 AppDelegate
实际上也是一个单例实例对象,在App推出前永远也不会被释放,AppDelegate在程序启动时就不断跟踪App的状态变化,处理包括从其他应用跳转、启动应用、后台运行等动作。
主要功能:
- 在启动时运行用以初始化App的代码
- 响应App在各个生命周期状态的指定方法
- 接受推送通知或者本地通知启动App的情况
- 处理低内存警告
- 处理App的状态保存和恢复
- 响应由App处理的事件
- 处理数据的存储
1.4 App的生命周期
App从启动到退出的过程中,iOS应用程序不断从系统接收各种事件,如:用户点击了屏幕、用户点击了Home键,并对这些事件进行响应。接收事件是UIApplication对象的工作,但是,响应事件需要由程序员编写的代码来处理。为了理解事件响应需要在哪里处理,就必须对iOS应用程序的整个生命周期和事件周期有所了解。 应用程序的活动状态
应用程序的活动状态:
-
not running
未运行状态,程序并没有进行启动时的状态 -
inactive
未激活状态,表示程序在前台进行运行,但是没有接受到任何的事件进行处理,比如一个UI界面不含有任何操作时为未激活状态 -
active
激活状态,应用程序接受到事件,并且对事件进行响应和处理,这也是前台的一个重要的状态 -
backGround
后台状态,处于运行中的应用程序切换到后台时的状态,会在此状态保留一定时间,时间超过时就会进入应用程序的挂起状态,有的应用程序也可以根据需求使其长期进入后台状态 -
suspended
挂起状态,此状态也是一种后台状态,于backGround的不同在于挂起状态的应用程序是不可以执行代码的,其特点是程序还是停留在内存中,当出现内存警告时iOS系统会首先把挂起的程序清除出内存并为处于前台运行状态的应用程序提供内存
2 UIKit
UIKit
: 提供创建基于触摸用户界面的类,包括:屏幕上的绘制机制、捕捉事件、管理组织复杂的UI元素
2.1 视图(UIView)与图层(CALayer)
UIView:所有可以看到的组件,控件,视图的父类 UIView是容器对象:
每一个UIView都是一个容器,能容纳其他UIView。
容纳其他UIView的UIView我们称之为父控件,被容纳的UIView我们称之为子控件。
子控件的存在依赖于父控件的存在,子控件的位置等属性是以父控件作为基准的。
UIView不能做,但CALayer可以做的:
- 阴影、圆角、带颜色边框
- 3D变换
- 非矩形范围
- 透明遮罩
- 多级非线性动画
2.2 视觉效果
圆角:
- 一般圆角/方角
_buttonRegister.layer.cornerRadius = 25;
- 设定了背景图片的圆角
self.personButton.layer.masksToBounds = YES;
self.personButton.layer.cornerRadius = 19;
阴影:
shadowOpacity,一个必须在0.0(不可见)和1.0(完全不透明)之间的浮点数
阴影裁剪:
涂层的阴影继承自内容的外形,而不是根据边界和角半径确定的
图层蒙版:
maskToBounds可以沿着边界裁剪图形,如果想要展现自定义的框架,可以用CALayer的mask属性解决问题,这个属性本身也是一个CALayer类型
2.3 Core Graphics(核心图形)
支持绘制
- 贝塞尔线条,基本几何图形
- 文字
- 绘制、生成图片
- 读取、生成PDF
- 裁剪图片
- 自定义UI控件
2.4 Core Animation(核心动画)
-
两个抽象类的介绍
- CAAnimation是Core Annimation框架中执行动画的基类,这是个抽象类,不具备动画效果,只有用它的子类有动画效果。它是所有动画对象的父类,负责控制动画的持续时间和速度
- CAPropertyAnimation(属性动画)也是一个抽象类,不具备动画效果,子类才有具体的实现。
-
显示动画和隐式动画
-
显式动画:需要创建一个动画图像,并设置开始和结束值,直到把动画应用到某图层,动画才开始执行
-
隐式动画:不指定任何动画类型,仅改变非根layer动画属性,core animation会去制定如何以及何时时去做动画,不用自己做
-
根layer没有隐式动画,隐式动画只存在子layer上
3 常用组件
3.1 UIScrollView 滚动视图
UIScrollView是用来在屏幕上显示那些在有限区域内放不下的内容。例如,在手机屏幕上显示内容丰富的网页或者很大的图片。在这种情况下,需要用户对屏幕内容进行拖动或缩放来查看屏幕或窗口区域外的内容。
3.2 UITableView 表格视图
把内容按行分组显示的控件
UITableView的每行数据都是一个UITableViewCell:
- 每个cell使用IndexPath来表示位置
- IndexPath又分为section和row,每个节section为一组,其中可以包含多个行row。
3.3 UICollectionView 集合视图
4个组成部分:
- Cell : 单元格
- section:节
- 补充视图:节的header和footer
- 装饰视图:集合视图的背景视图。
4 小结
这次课主要学习了UIKit相关内容,与实际开发联系紧密