gpt4 book ai didi

swift - 如何从一组颜色和 float 创建 NSGradient?

转载 作者:行者123 更新时间:2023-11-28 16:18:46 25 4
gpt4 key购买 nike

我有一组 NSColor 和一组 CGFloat 表示梯度停止。我不知道如何使用这些数组来初始化 NSGradient

我尝试将它们制作成一个 (NSColor, CGFloat) 数组,但是 NSGradient(colorsAndLocations: 不会接受它,因为它需要可变参数:

The code <code>let gradient = NSGradient(colorsAndLocations: colorsAndLocations)</code> yielding the error <code>Cannot convert value of type '[(NSColor, CGFloat)]' to expected argument type '(NSColor, CGFloat)'</code>

NSGradient(colors:, atLocations:, colorSpace:) 需要一个 UnsafePointer ,我不知道如何在 Swift 中正确处理它,如果有的话方式。

最佳答案

我假设你知道这个用法:

let cAndL: [(NSColor, CGFloat)] = [(NSColor.redColor(), 0.0), (NSColor.greenColor(), 1.0)]
let gradient = NSGradient(colorsAndLocations: cAndL[0], cAndL[1])

不幸的是,Swift 没有提供给可变参数函数数组的方法。


然后是第二部分。如果某些 API 声明 UnsafePointer<T>作为数组,您可以创建 T 的 Swift 数组,并将其直接传递给 API。

let colors = [NSColor.redColor(), NSColor.greenColor()]
let locations: [CGFloat] = [0.0, 1.0]
let gradient2 = NSGradient(colors: colors, atLocations: locations, colorSpace: NSColorSpace.genericRGBColorSpace())

如果你想使用 Array ( NSColor , CGFloat ), 你可以这样写:

let gradient3 = NSGradient(colors: cAndL.map{$0.0}, atLocations: cAndL.map{$0.1}, colorSpace: NSColorSpace.genericRGBColorSpace()) 

关于swift - 如何从一组颜色和 float 创建 NSGradient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com