Я пытаюсь использовать 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. Вот прямоугольник перед анимацией:

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

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

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