Как использовать параметры UIViewAnimationCurve в CAAnimation

Я использую CAAnimation в CAShapeLayer, чтобы просто анимировать линию, которая перемещается слева направо (это просто урезанная версия более сложной программы). Я замедлил его, чтобы показать, что начальная четверть почти мгновенная, а затем остальные анимируются нормально.

Я видел, что можно использовать параметры UIView.animate для установки параметров UIViewAnimationCurve (например,.EaseIn или.Linear). Можно ли установить эти параметры при встраивании CAAnimation в CAShapeLayer? И нужно ли создавать анимацию каждый раз, когда вы хотите запустить ее, или есть команда "запустить анимацию"?

Ниже мой сокращенный код:

    // the containing UIView is called mainView

    mainView.layer.sublayers = nil

    // create a line using a UIBezierPath

    let path = UIBezierPath()
    path.move(to: CGPoint(x: 100, y: 100))
    path.addLine(to: CGPoint(x: 300, y: 100))

    // create a CAShapeLayer

    let shapeLayer = CAShapeLayer()
    shapeLayer.frame = CGRect(x: 0, y: 0, width: 1024, height: 1024)
    shapeLayer.strokeColor = UIColor.green.cgColor
    shapeLayer.lineWidth = 100
    shapeLayer.path = path.cgPath

    // create the animation

    mainView.layer.addSublayer(shapeLayer)
    let animation = CABasicAnimation(keyPath: "LetterStroke")

    animation.fromValue = 0
    animation.toValue = 1
    animation.duration = 10

    shapeLayer.add(animation, forKey: "animation")

Спасибо заранее.

2 ответа

Решение

Вы должны использовать timingFunction собственностью CABasicAnimation, Существует конструктор, который принимает эти предопределенные функции синхронизации, такие как

 animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)

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

shapeLayer.lineCap = kCALineCapRound

Это в сочетании с lineWidth, равным 100, заставило линию начать примерно четверть пути от начала. Я сделал lineWidth меньше, и он работал нормально.

Другие вопросы по тегам