Nhu cầu của tôi là hiển thị phân phối 3 màu trong một chế độ xem. Vì vậy, tôi đang sử dụng mã sau đây.Swift 2.1: Vị trí và phân bố màu 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)
}
Nhưng vấn đề là màu gradient không được phân phối theo yêu cầu của tôi. Ví dụ: nếu giá trị ihave của [1,0,1] thanh như vậy sẽ hiển thị 50% màu đỏ & 0% màu cam và 50% màu đỏ. Nếu giá trị là [0,0,1] thì chỉ nên vẽ màu đỏ. Làm thế nào tôi có thể đạt được điều này mà không có đường lưới?
bất kỳ giải pháp khác tốt hơn sẽ luôn luôn được đánh giá cao :)
nhờ. làm việc như một nét duyên dáng :) –
Bạn có thể vui lòng cho tôi biết làm thế nào chúng ta có thể làm tương tự cho arc hoặc cricle? Cảm ơn – Chetan
@Chúng tôi không thể vẽ một hình tròn bằng cách sử dụng CAGradientLayer, nó phải được vẽ bằng tay bằng cách sử dụng CGContextDrawRadialGradient. Ngoài ra, bạn có thể sử dụng chế độ xem sẵn như thế này - https://github.com/maxkonovalov/MKGradientView – maxkonovalov