我将整个项目的复习拆分成了几个部分, 每完成一部分我都会提交一次代码, 大家根据所复习到的部分, 检出对应的分支来看代码就可以了, 代码中的注释已经十分详尽了, 有问题或者疑惑大家可以随时留言沟通.
项目地址
知识点汇总
- 继承UIControl 实现自定义下拉刷新控件的封装
- Swift-Cell行高自适应之SnapKit
- Swift-枚举名、枚举值的相互转化
- Swift-通过字符串转class创建控制器
- 调度组的使用
- didSet方法中oldValue的简单使用
- 含有相同规律的字符串截取问题
- 截屏操作
- 系统的高斯模糊
- 系统绝对时间
- pop的介绍
通过pop实现的composeView
Apr-09-2020 13-16-14.gif
5. 调度组
// 创建调度组: 等待所有任务都结束了, 会得到通知
let group = DispatchGroup()
for dict in array) {
// 进入调度组
group.enter()
// 进行的操作
do something... complete{
// 离开调度组
group.leave()
}
}
// 调度组接受所有任务完成的消息
group.notify(queue: DispatchQueue.main) {
do something...
}
6. didSet方法中oldValue的简单使用
didSet方法中oldValue 就是该属性上一次的值.
7. 含有相同规律的字符串截取问题
image.png
8. 截屏操作
private func screenShot() -> UIImage? {
// 1. 拿到主window
let window = UIApplication.shared.windows.first!
// 2. 开启图像上下文
UIGraphicsBeginImageContext(window.frame.size)
// 3. 把window上的内容渲染到上下文中
// iOS7.0 之后提出的, afterScreenUpdates表示是否在屏幕更新后渲染
window.drawHierarchy(in: window.frame, afterScreenUpdates: false)
// 4. 从上下文中获取到image
let image = UIGraphicsGetImageFromCurrentImageContext()
// 5. 关闭上下文
return image
}
9. 系统的高斯模糊
// 原生高斯模糊 - light是个枚举
let blur = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffect.Style.light))
blur.frame = 设置区域
要模糊的对象.addSubview(blur)
10. 系统绝对时间
image.png
12. 通过pop实现的composeView(详见HComposeView.swift
)
// 实例化阻尼动画对象 -> 变化中心点坐标
let anSpring = POPSpringAnimation(propertyNamed: kPOPViewCenter)!
// 设置终点位置
anSpring.toValue = CGPoint(x: button.center.x, y: button.center.y - H)
// 开始时间 CACurrentMediaTime() 系统绝对时间
anSpring.beginTime = CACurrentMediaTime() + Double(i)*0.025
//[0-20] 弹力 越大则震动幅度越大
anSpring.springBounciness = 4
//[0-20] 速度 越大则动画结束越快
anSpring.springSpeed = 12
// 给button按钮添加动画
button.pop_add(anSpring, forKey: nil)
.End