Синхронизировать анимацию заполнения штриховкой на основе статуса UIProgressView? - PullRequest
0 голосов
/ 02 мая 2019

В настоящее время у нас есть круговой индикатор выполнения, который работает правильно, для целей тестирования он активируется жестом касания.

 func createCircleShapeLayer() {
    let center = view.center
    if UIDevice.current.userInterfaceIdiom == .pad {
        let circlePath = UIBezierPath(arcCenter: center, radius: 150, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)
        circleShapeLayer.path = circlePath.cgPath
    } else {
        let circlePath = UIBezierPath(arcCenter: center, radius: 100, startAngle: -CGFloat.pi / 2, endAngle: 2 * CGFloat.pi, clockwise: true)
        circleShapeLayer.path = circlePath.cgPath
    }
    circleShapeLayer.strokeColor = UIColor.green.cgColor
    circleShapeLayer.lineWidth = 20
    circleShapeLayer.fillColor = UIColor.clear.cgColor
    circleShapeLayer.lineCap = CAShapeLayerLineCap.round
    circleShapeLayer.strokeEnd = 0
    view.layer.addSublayer(circleShapeLayer)

    //tap gesture used for animation testing
    view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(anitmateCirleProgress)))
}

@objc func anitmateCirleProgress() {
    let strokeAnimation = CABasicAnimation(keyPath: strokeEnd)
    strokeAnimation.toValue = 1
    strokeAnimation.duration = 2
    strokeAnimation.fillMode = .forwards
    strokeAnimation.isRemovedOnCompletion = false
    circleShapeLayer.add(strokeAnimation, forKey: "strokeAnimation")
}

Проблема заключается в том, что индикатор выполнения должен заполняться в зависимости от состояния UIProgressView: напр.

totalProgressView.setProgress (45, animated: true)

Есть ли способ синхронизации анимационного штриха на основе прогресса UIProgressView?

1 Ответ

0 голосов
/ 02 мая 2019

Я думал, что UIProgressView принял значение прогресса от 0 до 1?Если это так, ваш пример кода, который устанавливает вид прогресса на 45, не имеет смысла.

UIProgressView и обводка слоя формы. И оба используют значения от 0 до 1, так что вы можете просто установить обапредставление хода выполнения и ваш пользовательский слой shapeEnd равны дробному значению, и оба они показывают одинаковое количество завершений.

...