UIView.animate не вызывает отрисовку (rect :) - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь использовать UIView.animate(withDuration:animations:) для анимации ширины представления. Вот код представления:

class MyView: UIView {
    override func draw(_ rect: CGRect) {
        let rect = bounds.insetBy(dx: 4, dy: 4)
        let path = UIBezierPath(roundedRect: rect, cornerRadius: 10)
        UIColor.red.setStroke()
        UIColor.white.setFill()
        path.lineWidth = 8
        path.fill()
        path.stroke()
    }
}

Вот код в контроллере представления:

private var myView: MyView!

override func viewDidLoad() {
    super.viewDidLoad()
    myView = MyView()
    myView.backgroundColor = UIColor.clear
    view.addSubview(myView)
}

override func viewDidLayoutSubviews() {
    myView.frame = CGRect(x: 100, y: 40, width: 100, height: 100)
}

@IBAction func test(_ sender: Any) {
    UIView.animate(withDuration: 1) {
        self.myView.frame = CGRect(x: 100, y: 40, width: 200, height: 100)
    }
}

Проще говоря, когда нажата кнопка test, я анимирую ширину прямоугольник с закругленными углами от 100 до 200. Вот прямоугольник перед анимацией:

before animation

Я ожидаю увидеть следующее после анимации:

expected

Однако вместо этого я получаю следующее:

actual result

По-видимому, анимация не работает не вызывает MyView.draw (rect :) во время анимации, а просто искажает уже нарисованное изображение. Что мне делать, чтобы исправить?

...