ios - 使用 UIBezierPath 可视化冒泡排序
问题描述
我试图通过按高度对一组 UIBezierPath 线进行排序来可视化冒泡排序,你能帮我制作排序过程的动画吗?我需要:
- 使比较为红色的线条
- 显示两行交换的时刻
在 ViewController 中重绘视图的代码:UPD
func sortLines() {
DispatchQueue.global(qos: .background).async {
for i in 0..<self.myView.lines.count {
for j in i..<self.myView.lines.count {
if self.myView.lines[i].bounds.height > self.myView.lines[j].bounds.height {
let lineI = self.self.myView.lines[i]
let lineJ = self.self.myView.lines[j]
let iX = lineI.currentPoint.x
let jX = lineJ.currentPoint.x
lineI.apply(CGAffineTransform(translationX: jX-iX, y: 0))
lineJ.apply(CGAffineTransform(translationX: iX-jX, y: 0))
self.self.myView.lines[i] = lineJ
self.self.myView.lines[j] = lineI
DispatchQueue.main.async {
self.myView.setNeedsDisplay()
}
}
}
}
}
myView.setNeedsDisplay()
应该在每次迭代后更新视图,但我知道只有在整个循环完成后才会调用它,我试图将那段代码放在 DispatchQueue.main 中,但没有任何帮助。
绘制线条的视图:
import UIKit
class LineView: UIView {
var lines: [UIBezierPath] = []
override func draw(_ rect: CGRect) {
for line in lines {
line.stroke()
}
}
}
中间没有动画。
升级版:
解决方案
推荐阅读
- html - 即使在重新安装后,Firefox 也会为 img 元素加载旧的 src url
- json - 架构更新验证失败 Azure 逻辑应用
- macos - 如何为 MacOS 创建 WKWebView 应用程序
- c++ - 继承 QObject 的类中的方法在调用时被识别为属性,不运行方法
- arrays - 在设定的时间之间创建日期/时间数组
- python - 将字符串的每个单独字母转换为等效的 ASCII - Python
- python - 如果用户没有在python3中提供语音输入,如何手动获取用户输入
- regex - 如何为自定义语法高亮编写正则表达式
- php - json解码不适用于带有数组的字符串
- javascript - string.startsWith() 通配符或正则表达式