Визуализируйте сортировку пузырьков с помощью UIBezierPath - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь визуализировать пузырьковую сортировку, сортируя массив строк UIBezierPath по их высоте, вы можете помочь мне оживить процесс сортировки?Мне нужно:

  1. сделать строки, которые сравниваются красным
  2. показать момент, когда две строки поменялись местами

Код, который перерисовывает представление в 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()
        }
    }
    }

Может быть, скриншоты могут помочь понять: before sort is tapped

after

Нет анимации между.

UPD:

error error

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...