मेरी आवश्यकता एक दृश्य में 3-रंगीन वितरण दिखाने के लिए है। तो मैं निम्नलिखित कोड का उपयोग कर रहा हूँ।स्विफ्ट 2.1: CAGradientLayer रंग स्थान और वितरण
func drawWithGradientLayer() {
// total contains sum of all values contained in segmentValues variable.
// I'm using green -> Orange -> Red colors as colors
if total == 0 {
return
}
if gradientLayer.superlayer != nil {
gradientLayer.removeFromSuperlayer()
}
var previous: CGFloat = (CGFloat(segmentValues[0])/CGFloat(total))
var locations: [NSNumber] = [previous]
for var i=1; i<segmentValues.count; i++ {
previous = previous + (CGFloat(segmentValues[i])/CGFloat(total))
locations.append(previous)
}
locations.append(1.0) // Line may need to be commented
gradientLayer = CAGradientLayer()
gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)
gradientLayer.startPoint = CGPointMake(0.0, 0.5);
gradientLayer.endPoint = CGPointMake(1.0, 0.5);
gradientLayer.colors = colors
gradientLayer.locations = locations
self.layer.insertSublayer(gradientLayer, atIndex: 0)
}
लेकिन समस्या यह है कि ढाल रंग मेरी आवश्यकताओं के अनुसार वितरित नहीं होते हैं। उदा। यदि [1,0,1] मानों का मूल्य है तो बार को 50% लाल & 0% नारंगी और 50% लाल प्रदर्शित करना चाहिए। यदि मान [0,0,1] हैं तो केवल लाल रंग खींचा जाना चाहिए। ग्रिड लाइनों के बिना मैं इसे कैसे प्राप्त कर सकता हूं?
किसी अन्य बेहतर समाधान हमेशा सराहना की जाएगी :)
धन्यवाद। एक आकर्षण की तरह काम किया :) –
क्या आप कृपया मुझे बता सकते हैं कि हम आर्क या क्रिकल के लिए कैसे कर सकते हैं? धन्यवाद – Chetan
@ ध्यान दें CAGradientLayer का उपयोग करके गोलाकार ढाल बनाना असंभव है, इसे CGContextDrawRadialGradient का उपयोग करके मैन्युअल रूप से खींचा जाना है। वैकल्पिक रूप से, आप इस तरह एक तैयार किए गए दृश्य का उपयोग कर सकते हैं - https://github.com/maxkonovalov/MKGradientView – maxkonovalov