我在Swift代码中尝试绘制渐变时遇到错误:
GradientView.swift:31:40:找不到接受提供的参数的'__conversion'的重载
这是我的代码:
let context: CGContextRef = UIGraphicsGetCurrentContext()
let locations: CGFloat[] = [ 0.0, 0.25, 0.5, 0.75 ]
let colors = [UIColor.redColor().CGColor, UIColor.greenColor().CGColor,UIColor.blueColor().CGColor, UIColor.yellowColor().CGColor]
let colorspace: CGColorSpaceRef = CGColorSpaceCreateDeviceRGB()
let gradient: CGGradientRef = CGGradientCreateWithColors(colorspace, colors, locations)
//CGGradientCreateWithColors(colorspace,colors,locations)
let startPoint: CGPoint = CGPointMake(0, 0)
let endPoint: CGPoint = CGPointMake(500,500)
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
Run Code Online (Sandbox Code Playgroud)
问题是CGGradientCreateWithColors采用CFArray而不是普通的Swift数组.我不知道如何将CFArray转换为Array,并且在Apple的文档中找不到任何内容.任何的想法?谢谢
只是在将我的代码从swift 2.3转换为3的过程中.在旧代码中,我通过以下代码创建了一个渐变:
let colours:CFArrayRef = [tColour.CGColor, bColour.CGColor]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let gradient = CGGradientCreateWithColors(colorSpace, colours, nil)
Run Code Online (Sandbox Code Playgroud)
当Xcode 8转换代码时,它将其更改为以下内容:
let colours:CFArray = [tColour.cgColor, bColour.cgColor]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let gradient = CGGradient(colorsSpace: colorSpace, colors: colours, locations: nil)
Run Code Online (Sandbox Code Playgroud)
但是,代码会产生以下错误:
上下文类型"CFArray"不能与数组文字一起使用
任何人都可以建议如何正确转换代码.
感谢
Reza
StyleKit代码:
static let red: UIColor = UIColor(red: 0.800, green: 0.000, blue: 0.000, alpha: 1.000)
static let blue: UIColor = UIColor(red: 0.200, green: 0.600, blue: 1.000, alpha: 1.000)
static let green: UIColor = UIColor(red: 0.000, green: 0.600, blue: 0.200, alpha: 1.000)
static let yinying: UIColor = UIColor(red: 1.000, green: 1.000, blue: 1.000, alpha: 0.200) static let redGradient: CGGradient = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [UIColor.whiteColor().CGColor, UIColor.whiteColor().blendedColorWithFraction(0.5, ofColor: StyleKitMarkSix.red).CGColor, StyleKitMarkSix.red.CGColor], [0, 0, 1])!
static let blueGradient: CGGradient = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [UIColor.whiteColor().CGColor, UIColor.whiteColor().blendedColorWithFraction(0.5, ofColor: StyleKitMarkSix.blue).CGColor, StyleKitMarkSix.blue.CGColor], [0, 0, …Run Code Online (Sandbox Code Playgroud)