class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let v = ProgessView(frame: CGRect(x: 20, y: 200, width: 100, height: 10))
view.addSubview(v)
//v.progressLayer.strokeEnd = 0.8
}
}
class ProgessView: UIView {
lazy var progressLayer: CAShapeLayer = {
let line = CAShapeLayer()
let path = UIBezierPath()
path.move(to: CGPoint(x: 5, y: 5))
path.addLine(to: CGPoint(x: self.bounds.width - 5, y: 5))
line.path = path.cgPath
line.lineWidth = 6
line.strokeColor = UIColor(colorLiteralRed: 127/255, green: 75/255, blue: 247/255, alpha: 1).cgColor
line.strokeStart = 0
line.strokeEnd = 0.5
line.lineCap = kCALineCapRound
line.frame = self.bounds
return line
}()
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.white
layer.cornerRadius = 5
layer.borderWidth = 1
layer.borderColor = UIColor(colorLiteralRed: 197/255, green: 197/255, blue: 197/255, alpha: 1).cgColor
layer.addSublayer(progressLayer)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
टेस्ट मेरी कोड। आप ऊंचाई और चौड़ाई को अपनी इच्छानुसार डिजाइन कर सकते हैं। प्रगति दृश्य की प्रगति को बदलने के लिए आप strokeEnd
का उपयोग कर सकते हैं। आप इसमें एक एनीमेशन जोड़ सकते हैं। लेकिन वास्तव में, यह पहले से ही एनिमेटेबल है, आप इसके प्राथमिक प्रभाव को देखने के लिए strokeEnd
के मान को बदल सकते हैं। यदि आप अपनी खुद की एनीमेशन डिजाइन करना चाहते हैं। नीचे की तरह CATransaction
आज़माएं।
func updateProgress(_ progress: CGFloat) {
CATransaction.begin()
CATransaction.setAnimationDuration(3)
progressLayer.strokeEnd = progress
CATransaction.commit()
}
स्रोत
2016-12-05 07:14:03
drawRect में setNeedsDisplay को कॉल करना गलत है (अब यह अप्रत्यक्ष रूप से किया गया है)। क्या आवश्यक है - कॉल सेटडिड्स डिस्प्ले जो drawRect को ट्रिगर करता है। –