从 UIColors 或 NSColors 数组创建 CGColors 数组
Creating an Array of CGColors from an Array of UIColors or NSColors
我一直在测试 CAGradientLayer
为 iOS 和 Mac OS X (Cocoa) 创建渐变颜色。例如,我有以下代码行来为 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 的数组?我认为 this topic 可能是相关的。一个问题是我不知道如何声明和初始化一组 CGColor 对象。
谢谢
你可以这样做:
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({ [=10=].CGColor })
map
将闭包应用于数组中的每个元素并 returns 它。
[=16=]
是闭包的第一个(也是唯一一个)参数。
它实际上是 shorthand 用于:
let cgColors: [CGColor] = colors.map({ return [=11=].CGColor })
这是一个 shorthand 用于:
let cgColors: [CGColor] = colors.map({
color: in
return color.CGColor
})
这是一个 shorthand 用于:
let cgColors: [CGColor] = colors.map({
(color: UIColor) in
return color.CGColor
})
Swift 5+
您可以使用以下方法将 UIColor
数组转换为 CGColor
数组:colors.map { [=13=].cgColor }
// example
let colors: [UIColor] = [.red, .green, .blue]
let cgColors = colors.map { [=10=].cgColor }
我一直在测试 CAGradientLayer
为 iOS 和 Mac OS X (Cocoa) 创建渐变颜色。例如,我有以下代码行来为 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 的数组?我认为 this topic 可能是相关的。一个问题是我不知道如何声明和初始化一组 CGColor 对象。
谢谢
你可以这样做:
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({ [=10=].CGColor })
map
将闭包应用于数组中的每个元素并 returns 它。
[=16=]
是闭包的第一个(也是唯一一个)参数。
它实际上是 shorthand 用于:
let cgColors: [CGColor] = colors.map({ return [=11=].CGColor })
这是一个 shorthand 用于:
let cgColors: [CGColor] = colors.map({
color: in
return color.CGColor
})
这是一个 shorthand 用于:
let cgColors: [CGColor] = colors.map({
(color: UIColor) in
return color.CGColor
})
Swift 5+
您可以使用以下方法将 UIColor
数组转换为 CGColor
数组:colors.map { [=13=].cgColor }
// example
let colors: [UIColor] = [.red, .green, .blue]
let cgColors = colors.map { [=10=].cgColor }