Я пытаюсь визуализировать пузырьковую сортировку, сортируя массив строк 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()
}
}
}
Может быть, скриншоты могут помочь понять:
Нет анимации между.
UPD: