Как использовать параметры 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 меньше, и он работал нормально.