Mein Bedürfnis ist, 3-farbige Verteilung in einer Ansicht zu zeigen. Also benutze ich folgenden Code.Swift 2.1: CAGradiantLayer Farbort und Verteilung
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)
}
Aber Problem ist, dass Farbverläufe nicht entsprechend meinen Anforderungen verteilt werden. Wenn z. B. Werte von [1,0,1] aufweisen, sollte bar 50% rot angezeigt werden & 0% orange und 50% rot. Wenn Werte [0,0,1] sind, sollte nur redColor gezeichnet werden. Wie kann ich dies ohne Gitterlinien erreichen?
andere bessere Lösung wird immer geschätzt werden :)
Dank. arbeitete wie ein Charme :) –
Können Sie mir bitte sagen, wie können wir das gleiche für Bogen oder Cricle tun? Danke, – Chetan
@Chetan ist es unmöglich, einen kreisförmigen Farbverlauf mit CAGradientLayer zu zeichnen, es muss manuell mit CGContextDrawRadialGradient gezeichnet werden. Alternativ können Sie eine fertige Ansicht wie diese verwenden - https://github.com/maxkonovalov/MKGradientView – maxkonovalov