Как анимировать UIBezierPath внутри рисования (_ :)? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть задача нарисовать прямоугольник в методе draw(_:) и оживить его высоту.

var height = 0
override func draw(_ rect: CGRect) {
    let rect = CGRect(x: 0, y: 0, width: 100, height: height)
    let rectanglePath = UIBezierPath(rect: rect)
    UIColor.green.setFill()
    rectanglePath.fill()
}

И я хочу анимировать что-то вроде этого:

func animate() {
    UIView.animate(withDuration: 2) {
        self.height = 300
    }
}

Я также могу использовать CAShapeLayer и CABasicAnimation, но я не знаю, как нарисовать его в методе draw(_:). В этой задаче необходимо использовать метод draw(_:): (

1 Ответ

1 голос
/ 29 апреля 2020
class View: UIView{
override func draw(_ rect: CGRect)
{
    let rectanglePath = UIBezierPath(rect: self.frame)
    UIColor.green.setFill()
    rectanglePath.fill()
}}
class ViewController: UIViewController{

override func viewDidLoad()
{
    super.viewDidLoad()
    let subview = View(frame:  CGRect(x: 0, y: 0, width: 100, height: 0))
    self.view.addSubview(subview)

    UIViewPropertyAnimator.runningPropertyAnimator(
       withDuration: 2,
       delay: 0,
       options: .curveLinear,
       animations: {self.view.subviews[0].frame = CGRect(x: 0, y: 0, width: 100, height: 100)}
    )

}}
...