我正在尝试沿着一条线创建图像图案。最终,我想将其转换为用于绘画应用程序的铅笔纹理,但是现在我只是沿一条简单的线测试图案。当我运行它时,我得到一条黑色实线,控制台将显示以下消息:

错误: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/

10-12 01:22