UIBezierPath искажение анимации круга - PullRequest
0 голосов
/ 17 мая 2018

Итак, я довольно новичок в анимации и BezierPaths.Вот мой код.Не могли бы вы помочь мне выяснить, что вызывает искажение?

    let circleLayer = CAShapeLayer()
    let radius: CGFloat = 100.0
    let beginPath = UIBezierPath(arcCenter: view.center, radius: 0, startAngle: CGFloat(0), endAngle:CGFloat(Double.pi * 2), clockwise: true)
    let endPath = UIBezierPath(arcCenter: view.center, radius: radius, startAngle: CGFloat(0), endAngle:CGFloat(Double.pi * 2), clockwise: true)

    circleLayer.fillColor = UIColor.red.cgColor
    circleLayer.path = beginPath.cgPath

    circleLayer.removeAllAnimations()

    let scaleAnimation = CABasicAnimation(keyPath: "path")
    scaleAnimation.fromValue = beginPath.cgPath
    scaleAnimation.toValue = endPath.cgPath

    let alphaAnimation = CABasicAnimation(keyPath: "opacity")
    alphaAnimation.fromValue = 1
    alphaAnimation.toValue = 0

    let animations = CAAnimationGroup()
    animations.duration = 2
    animations.repeatCount = .greatestFiniteMagnitude
    animations.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
    animations.animations = [scaleAnimation, alphaAnimation]

    circleLayer.add(animations, forKey: "animations")

    self.view.layer.addSublayer(circleLayer)

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 17 мая 2018

Ваша цель состоит в том, чтобы круг вырос из центральной точки?

Проблема, с которой вы сталкиваетесь при анимации дуг, состоит в том, что начальный и конечный путь должны содержать одинаковое количество точек. Я предполагаю, что с радиусом 0 система упрощает ваш начальный путь до одной точки или даже пустой путь.

Вместо этого вы можете использовать начальный радиус 0,01.

Другим вариантом будет анимировать масштаб слоя от 0 до 1 и установить размер изображения до желаемого конечного размера.

...