这是我参与「第四届青训营」笔记创作活动的的第十四天,本篇文章将会分为三个部分来介绍:
- iOS App启动后的主要流程以及生命周期
- UIView, CALayer的属性、布局与视觉效果
- 常用UI控件、UIControllerView的组成与结构
一、iOS App启动后的主要流程以及生命周期
一个iOS App的入口
main函数是iOS App的入口,当我们创建一个iOS App的时候,XCode会自动提供一个main函数实现。并且在一般情况下不用修改这个main函数实现。
UIApplicationMain
这个函数会创建一个UIApplication对象(一个应用程序只会有一个UIApplication对象,它是iOS的应用实例,负责监听应用级事件),并且为其指定代理对象AppDelegate(AppDelegate对象实际上也是一个单例实例对象,在App推出前永远也不会被释放,AppDelegate在程序启动时就不断跟踪App的状态变化)来开启应用程序的生命周期。创建UIApplication对象和AppDelegate来设置事件循环。
AppDelegate主要功能:
- 在启动时运行用以初始化App的代码
- 响应App在各个生命周期状态的指定方法
- 接受推送通知或者本地通知启动App的情况
- 处理低内存警告
- 处理App的状态保存和恢复
- 响应由App处理的事件
- 处理数据的存储
iOS App生命周期
引用:www.jianshu.com/p/a37b16caf…
- not running 未运行
- Inactive 前台非活动状态。处于前台但是不能接受事件处理。有来电显示或短信提醒的时候可能会出现这类情况。
- Active 程序在前台运行而且接收到了事件。这也是前台的一个正常的模式。
- Background 程序在后台而且能执行代码,代码执行完毕的时候程序挂起(suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态。
- Suspended 程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的。
app生命周期中执行方法&执行顺序:
更多详细内容可以阅读:www.jianshu.com/p/a37b16caf…
二、UIView, CALayer的属性、布局与视觉效果
iOS系统框架中基本的两个框架:Foundation(提供基础API)和UIKit(提供基础视图类库)。
引用:www.dotnettricks.com/learn/xamar…
UIKit提供的类:
UIView(视图)&CALayer(图层)
UIView是什么?
UIView是所有视图的根类。UIView可以处理触摸事件,可以支持基于CoreGraphics绘图,可以做仿射变换,或者做滑动或者渐变动画。一个视图就是在屏幕上显示的一个矩形块。可以展示图片、文字、视频等等,也可以拦截鼠标或手势等用户输入。每一个UIView的背后都有一个CALayer在支撑。
UIView实际上是CALayer的封装。CALayer不处理用户的交互,他只负责管理子涂层位置,包含一些方法和属性用来做动画和变换。在层级关系上,UIView和CALayer有着平行的层级关系。
它们之间的关系:
引用:www.jianshu.com/p/b61cc26f5…
UIView不能做,但CALayer可以做的:
- 阴影、圆角、带颜色边框
- 3D变换
- 非矩形范围
- 透明遮罩
- 多级非线性动画
图层几何学
UIView三个重要属性:frame、bounds、center(对应CALayer:frame、bounds、position)
视图布局:
手动布局,(x, y, height, width)
自动布局 Masonry
基础API:
//为UIView添加约束
mas_makeConstraints()
//移除旧约书,添加新约束
mas_remakeConstraints()
//更新约束
mas_updateConstraints()
//传递基础数据类型
mas_equalTo()
图形变换
表面将图形绘制在最上方:
//赋值任意数字都可以让图形表面上在上方
view.layer.zPosition = 1;
视觉效果
圆角
如果想创建有些圆角有些直角的图层或视图的时候,可能需要用到图层蒙版或者是CAShapeLayer
view.layer.cornerRadius = 10
图层边框
CALayer的两个属性:borderWidth和borderColor, 默认borderWidth是0、borderColor是黑色。 borderColor是CGColorRef类型,而不是UIColor,不是Cocoa的内置对象。 边框不会把寄宿图或者是子图层的形状计算进来,如果涂层的子图层超过了边界,边框依然会沿着涂层的边界绘制出来。
view.layer.borderWidth = 10;
view.layer.borderColor = [UIColor blackColor].CGColor;
阴影
shadowOpacity,一个必须在0.0(不可见)和1.0(完全不透明)之间的浮点数。可以使用CALayer的另外三个属性改变阴影表现:shadowColor、shadowOffset、shadowRadius。shadowRadius越大,阴影越模糊,看上去深度就会更明显。
//阴影半径
view.layer.shadowRadius = 20;
//阴影颜色
view.layer.shadowColor = [UIColor blackColor].CGColor;
//阴影透明度
view.layer.shadowOpacity = 1;
//阴影偏移
view.layer.shadowOffset = CGSizeMake(10,10);
三、常用UI控件、UIControllerView的组成与结构
UIControllerView
UIViewController生命周期:
引用:www.jianshu.com/p/e0a3909fb…
UIViewController由三个部分组成:布局(layout)、数据代理(DataSource)、行为代理(Delegate)
Layout: 最简单的常用对象UICollectionViewFlowLayout,就是所谓的流式布局。
DataSource: 需要实现UICollectionViewDataSource协议,当collectionView展示时会调用指定对象的代理方法去获取基本数据,并以此来渲染cell。
Delegate: 我们可以同时注册不同类或者不同identifier的cell。在使用时,自动从缓存池中根据identifier取用对应的cell。
常用UI控件
- UILabel(文本标签) 文本标签的作用是显示一串固定的文字
- UIButton(按钮) 按钮的作用是:监听用户的点击事件,在用户点击后作出响应
- UITextField(文本输入框) 文本输入框可以弹出键盘,让用户输入文本内容
- UITextView(能滚动的文字显示控件) 如果文字内容比较多,需要换行显示,并且需要编辑
- UIProgressView(进度条) 水瓶进度条,比如显示文件的下载进度,程序的启动进度
- UISlider(滑块) 在2个数值之间滑动选择,比如调节音量大小
- UIActivityIndicator(圈圈) 一直在转圈圈,表示让用户等待
- UIAlertView(对话框) 从中间弹出一个框提示用户下一步该做什么
- UIActionSheet(底部弹窗) 从底部弹出一个框提示用户下一步该做什么
- UIScrollView(滚动的控件) 如果内容比较多,超出了一个屏幕,用它来显示
- UIPageControl(分页控件) 能显示当前的页码
- UITableView(表格) 如果每一行显示的内容格式差不多,就用这个控件
- UICollectionView(九宫格) 如果显示的东西是一块一块,一格一格的,而且每个格子差不多,就用这个控件
- UIWebView(网页显示控件) 一般用来显示网页,使用它,就可以在手机上浏览网页
- UISwitch(开关) 要么打开,要么关上
- UISegmentControl(选项卡) 在固定的几个选项之间进行选择
- UIPickView(选择器) 在多行数据之间只选择一个
- UIDatePicker(日期选择器) 选择日期
- UIToolbar(工具条) 一般显示在底部或者键盘顶部,里面有几个小按钮
- UINavigator(导航条) 显示在顶部的条
Reference
《iOS App 入门与 UIKit 简介》juejin.cn/post/712344…
《iOS 生命周期》www.jianshu.com/p/a37b16caf…
《Understanding Xamarin iOS - Build Native iOS App》www.dotnettricks.com/learn/xamar…
《UIView与CALayer介绍》www.jianshu.com/p/b61cc26f5…
《UIViewController 生命周期》www.jianshu.com/p/e0a3909fb…
《IOS开发之——常用的UI控件(5)》blog.csdn.net/Calvin_zhou…