我正在尝试沿着一条线创建图像图案。最终,我想将其转换为用于绘画应用程序的铅笔纹理,但是现在我只是沿一条简单的线测试图案。当我运行它时,我得到一条黑色实线,控制台将显示以下消息:
错误:CGContextSetStrokePattern:用非图案颜色空间指定的图案。
func drawStroke(view: UIView, context: CGContext?) {
let lineWidth: CGFloat = 5.0
let callbacks:CGPatternCallbacks = CGPatternCallbacks(
version: 0,
drawPattern: { (pointer, context) -> Void in
//let PENCIL = UIColor(patternImage: UIImage(named: "Pencil_Texture.png")!)
CGContextSetFillColorWithColor(context, patternImage.CGColor)
CGContextAddArc(context, 3, 3, 4, 0, radians(360), 0)
CGContextFillPath(context)
},releaseInfo: nil)
CGContextSaveGState(context)
let space = CGColorSpaceCreateDeviceRGB()
let patternSpace:CGColorSpaceRef = CGColorSpaceCreatePattern(space)!
CGContextSetFillColorSpace(context, patternSpace)
let pattern:CGPatternRef = CGPatternCreate(nil, view.frame, CGAffineTransformIdentity, 24, 24, .ConstantSpacing, true,[ callbacks ])!
let alpha:CGFloat = 1.0
//line
CGContextSetLineWidth(context, lineWidth)
CGContextSetLineCap(context, .Round)
//points
CGContextMoveToPoint(context, view.center.x, view.center.y)
CGContextAddQuadCurveToPoint(context, view.center.x, view.center.y, view.center.x, view.center.y + 200)
// Draw the stroke
CGContextSetStrokePattern(context, pattern, [alpha])
CGContextStrokePath(context)
CGContextRestoreGState(context)
}
我查看了Apple的文档,但并没有太大帮助。我已经在Objective-C中看过一些教程,但是我认为某些Obj-C方法在Swift中不存在。
最佳答案
因为您使用的是模具(无色)图案
您需要在代码中更改2错误
1 / CGPatternCreate函数:将isColored参数设置为False,因为您使用的是无色
let pattern:CGPatternRef = CGPatternCreate(nil, view.frame, CGAffineTransformIdentity, 24, 24, .ConstantSpacing, false,[callbacks])!
2 /非常重要,您绘制了笔触路径,因此需要在随后的Stroke中设置ColorSpace和StrokePattern。
let color1: [CGFloat] = [1.0, 0.0, 0.0, 1.0]
CGContextSetStrokeColorSpace(context, patternSpace)
CGContextSetStrokePattern(context, pattern, color1)
关于ios - Swift-错误:CGContextSetStrokePattern:使用非图案颜色空间指定的图案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35184294/