Создание массива CGColors из массива UIColors или NSColors
Я тестировал CAGradientLayer
создавать градиентные цвета для iOS и Mac OS X (Какао). Например, у меня есть следующие строки кода для создания градиентных цветов для iOS.
let gradient: CAGradientLayer = CAGradientLayer()
gradient.frame = view.bounds
gradient.colors = [UIColor.orangeColor().CGColor,UIColor.redColor().CGColor]
gradient.locations = [0.1,0.9]
self.view.layer.insertSublayer(gradient,atIndex:0)
Теперь, что у меня есть массив цветов (UIColor
или же NSColor
), в зависимости от платформы разработки. Если я создаю массив, содержащий UIColor
(или же NSColor
) объекты программно, начиная с
var cArray = [UIColor]()
или же
var cArray = [NSColor]()
Как я могу создать массив, содержащий CGColors с ними? Я думаю, что эта тема может быть связана. Одна проблема заключается в том, что я не знаю, как объявить и инициализировать массив объектов CGColor.
Спасибо
3 ответа
Вы могли бы сделать:
extension _ArrayType where Generator.Element == UIColor {
func CGColors() -> [CGColorRef] {
var cgColorArray: [CGColorRef] = []
for color in self {
cgColorArray.append(color.CGColor)
}
return cgColorArray
}
}
Используйте это так:
let colors: [UIColor] = [UIColor.redColor(), UIColor.orangeColor()]
colors.CGColors()
Повторите для NSColor.
Я также хотел бы дать функцию map
немного внимания
let colors: [UIColor] = [UIColor.redColor(), UIColor.orangeColor()]
let cgColors: [CGColor] = colors.map({ $0.CGColor })
map
применяет замыкание к каждому элементу в массиве и возвращает его.
$0
является первым (и единственным) параметром для замыкания.
Это на самом деле сокращение для:
let cgColors: [CGColor] = colors.map({ return $0.CGColor })
что является сокращением для:
let cgColors: [CGColor] = colors.map({
color: in
return color.CGColor
})
что является сокращением для:
let cgColors: [CGColor] = colors.map({
(color: UIColor) in
return color.CGColor
})
Свифт 5+
Вы можете конвертировать
UIColor
массив в
CGColor
массив с использованием:
colors.map { $0.cgColor }
// example
let colors: [UIColor] = [.red, .green, .blue]
let cgColors = colors.map { $0.cgColor }