【发布时间】:2021-03-24 11:22:01
【问题描述】:
我想在基于 UIView 的进度条中添加动画。 这是我的代码。
@IBDesignable class PlainHorizontalProgressBar: UIView {
@IBInspectable var color: UIColor = .green {
didSet { setNeedsDisplay() }
}
var progress: CGFloat = 0 {
didSet { setNeedsDisplay() }
}
private let progressLayer = CALayer()
private let backgroundMask = CAShapeLayer()
override init(frame: CGRect) {
super.init(frame: frame)
setupLayers()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupLayers()
}
private func setupLayers() {
layer.addSublayer(progressLayer)
}
override func draw(_ rect: CGRect) {
backgroundColor = .grey
backgroundColor?.setFill()
UIBezierPath(roundedRect: rect, cornerRadius: rect.height * 0.25).fill()
backgroundMask.path = UIBezierPath(roundedRect: rect, cornerRadius: rect.height * 0.25).cgPath
layer.mask = backgroundMask
let progressRect = CGRect(origin: .zero, size: CGSize(width: rect.width * progress, height: rect.height))
progressLayer.frame = progressRect
layer.addSublayer(progressLayer)
progressLayer.backgroundColor = color.cgColor
}
}
这里的场景是,我有 ViewController A 和 ViewController B,我在 ViewController B 上有这个进度条,当我来的时候,我正在将一个值从 ViewController A 分配给 ViewController B(例如:myView.progress = 0.5)到 ViewController B 我的进度条已经填满了一半,但我想要的是,当我来到 ViewController B 时,当我降落在 viewController B 上时,它应该动画并填充在我面前。
【问题讨论】:
标签: ios swift uiview uiviewanimation uibezierpath