基于uiprogressview状态同步中风填充动画



当前,我们有一个正常工作的圆形进度栏,为了测试目的,它是通过龙头手势激活的。

 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的状态填充:ex。

totalprogressview.setprogress(45,动画:true(

是否有一种方法可以根据uiprogressview的进度同步动画中风?

我认为UIProgressView的进度值从0到1?如果是这样,将"进度视图"设置为45的示例代码没有意义。

UIProgressView和一个形状层的strekend都使用0到1的使用值,因此您应该能够将进度视图和自定义形状层的示例同时设置为相同的分数值,并使它们都显示出相同的数量完成。

最新更新