2016-02-03 2 views
0

Я пытаюсь создать шаблон изображения вдоль линии. В конце концов, я хотел бы превратить это в текстуру карандаша для приложения для рисования, но сейчас я просто тестирую шаблон вдоль простой строки. Когда я запускаю его, у меня получается сплошная черная линия, и консоль печатает это сообщение:Swift - Ошибка: CGContextSetStrokePattern: шаблон, заданный с нетравным цветовым пространством

Ошибка: 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.

ответ

0

Поскольку вы используете Stencil (неокрашенный) Модели

Вам нужно изменить 2 ошибки в коде

1/функция CGPatternCreate: набор isColored параметр передать ложных, потому что вы используете неокрашенный

let pattern:CGPatternRef = CGPatternCreate(nil, view.frame, CGAffineTransformIdentity, 24, 24, .ConstantSpacing, false,[callbacks])! 

2/Важно то, что вы нарисовали дорожку хода, так что вам нужно установить ColorSpace и StrokePattern в Stroke.

let color1: [CGFloat] = [1.0, 0.0, 0.0, 1.0] 
CGContextSetStrokeColorSpace(context, patternSpace) 
CGContextSetStrokePattern(context, pattern, color1) 
0

Swift 3,1 АНИ был изменен в Swift 3, так что вот код для Swift 3.1

Этого код для бесцветных шаблона (При указании «ложь» для параметра 'isColored' в CGPattern (..., isColored ложь ...))

let colorSpace: CGColorSpace = CGColorSpaceCreateDeviceRGB() 
    if let patternSpace:CGColorSpace = CGColorSpace(patternBaseSpace: colorSpace) { 
      ctx.setFillColorSpace(patternSpace) 
     // ... rest of the code 
    } 

Этот код для цветной pattern (Когда вы указываете «true» для параметра «isColored» в CGPattern (..., isColored: false, ...))

 if let patternSpace:CGColorSpace = CGColorSpace(patternBaseSpace: nil) { 
       ctx.setFillColorSpace(patternSpace) 
      // ... rest of the code 
     }