app入门与UIKit简介|青训营笔记

167 阅读6分钟

这是我参与「第四届青训营」笔记创作活动的的第十四天,本篇文章将会分为三个部分来介绍:

  1. iOS App启动后的主要流程以及生命周期
  2. UIView, CALayer的属性、布局与视觉效果
  3. 常用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主要功能:

  1. 在启动时运行用以初始化App的代码
  2. 响应App在各个生命周期状态的指定方法
  3. 接受推送通知或者本地通知启动App的情况
  4. 处理低内存警告
  5. 处理App的状态保存和恢复
  6. 响应由App处理的事件
  7. 处理数据的存储

iOS App生命周期

image.png 引用:www.jianshu.com/p/a37b16caf…

  • not running 未运行
  • Inactive 前台非活动状态。处于前台但是不能接受事件处理。有来电显示或短信提醒的时候可能会出现这类情况。
  • Active 程序在前台运行而且接收到了事件。这也是前台的一个正常的模式。
  • Background 程序在后台而且能执行代码,代码执行完毕的时候程序挂起(suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态。
  • Suspended 程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的。

app生命周期中执行方法&执行顺序:

image.png 更多详细内容可以阅读:www.jianshu.com/p/a37b16caf…

二、UIView, CALayer的属性、布局与视觉效果

iOS系统框架中基本的两个框架:Foundation(提供基础API)和UIKit(提供基础视图类库)。

image.png 引用:www.dotnettricks.com/learn/xamar…

UIKit提供的类: image.png

UIView(视图)&CALayer(图层)

UIView是什么?

UIView是所有视图的根类。UIView可以处理触摸事件,可以支持基于CoreGraphics绘图,可以做仿射变换,或者做滑动或者渐变动画。一个视图就是在屏幕上显示的一个矩形块。可以展示图片、文字、视频等等,也可以拦截鼠标或手势等用户输入。每一个UIView的背后都有一个CALayer在支撑。

UIView实际上是CALayer的封装。CALayer不处理用户的交互,他只负责管理子涂层位置,包含一些方法和属性用来做动画和变换。在层级关系上,UIView和CALayer有着平行的层级关系。

它们之间的关系:

image.png 引用: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生命周期:

image.png 引用:www.jianshu.com/p/e0a3909fb…

UIViewController由三个部分组成:布局(layout)、数据代理(DataSource)、行为代理(Delegate)

Layout: 最简单的常用对象UICollectionViewFlowLayout,就是所谓的流式布局。

DataSource: 需要实现UICollectionViewDataSource协议,当collectionView展示时会调用指定对象的代理方法去获取基本数据,并以此来渲染cell。

Delegate: 我们可以同时注册不同类或者不同identifier的cell。在使用时,自动从缓存池中根据identifier取用对应的cell。

常用UI控件

  1. UILabel(文本标签) 文本标签的作用是显示一串固定的文字
  2. UIButton(按钮) 按钮的作用是:监听用户的点击事件,在用户点击后作出响应
  3. UITextField(文本输入框) 文本输入框可以弹出键盘,让用户输入文本内容
  4. UITextView(能滚动的文字显示控件) 如果文字内容比较多,需要换行显示,并且需要编辑
  5. UIProgressView(进度条) 水瓶进度条,比如显示文件的下载进度,程序的启动进度
  6. UISlider(滑块) 在2个数值之间滑动选择,比如调节音量大小
  7. UIActivityIndicator(圈圈) 一直在转圈圈,表示让用户等待
  8. UIAlertView(对话框) 从中间弹出一个框提示用户下一步该做什么
  9. UIActionSheet(底部弹窗) 从底部弹出一个框提示用户下一步该做什么
  10. UIScrollView(滚动的控件) 如果内容比较多,超出了一个屏幕,用它来显示
  11. UIPageControl(分页控件) 能显示当前的页码
  12. UITableView(表格) 如果每一行显示的内容格式差不多,就用这个控件
  13. UICollectionView(九宫格) 如果显示的东西是一块一块,一格一格的,而且每个格子差不多,就用这个控件
  14. UIWebView(网页显示控件) 一般用来显示网页,使用它,就可以在手机上浏览网页
  15. UISwitch(开关) 要么打开,要么关上
  16. UISegmentControl(选项卡) 在固定的几个选项之间进行选择
  17. UIPickView(选择器) 在多行数据之间只选择一个
  18. UIDatePicker(日期选择器) 选择日期
  19. UIToolbar(工具条) 一般显示在底部或者键盘顶部,里面有几个小按钮
  20. 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…