2015-11-18 63 views
1

我正在嘗試生成我的UIView的pdf。在視圖中,我可以簡單地使用CGContextSetBlendMode(上下文,CGBlendMode.Clear)擦除行。當我繪製到pdf上下文(如使用UIGraphicsBeginPDFContextToData生成的)時,這適用於UIView的上下文,但相同的代碼會生成與CGContextSetStrokeColorWithColor中設置的顏色相同的代碼行。有人知道在pdf上下文中實現擦除的另一種方法嗎?在pdf上下文中刪除行

例如,當我在代碼的下拉菜單下面運行代碼時,會產生一條暗淡的紅線(alpha = 0.5),並在紅線上留下一個小間隙。但是,如果我提供一個pdfcontext它成爲與通過它運行的硬紅線淡淡的紅線(與阿爾法0.5另一個細細的紅線疊加)

let path = CGPathCreateMutable() 
    CGPathMoveToPoint(path, nil, 10, 10) 
    CGPathAddLineToPoint(path, nil, 10,100) 
    CGContextAddPath(context, path) 

    CGContextSetLineCap(context, CGLineCap.Round) 
    CGContextSetStrokeColorWithColor(context, UIColor.redColor().colorWithAlphaComponent(0.5).CGColor) 
    CGContextSetLineWidth(context, 10.0) 
    CGContextStrokePath(context) 

    CGPathMoveToPoint(path, nil, 10, 10) 
    CGPathAddLineToPoint(path, nil, 10,100) 
    CGContextAddPath(context, path) 

    CGContextSetBlendMode(context, CGBlendMode.Clear) 
    CGContextSetLineWidth(context, 2.0) 
    CGContextStrokePath(context) 

回答

1

最後我解決我的問題,一種解決方法。爲了這個問題的其他人的利益,這裏。

我在PDFContext中單獨繪製子視圖。對於每個我檢查它是否包含刪除。如果是這種情況,我打開一個單獨的ImageContext並生成視圖的圖像。

UIGraphicsBeginImageContext(objectView.frame.size) 
if let imageContext = UIGraphicsGetCurrentContext() { 
    objectView.drawObjectInContext(imageContext,rect: objectView.bounds) 
    self.applyEraser(imageContext, eraserShape: objectView.eraserLayer.eraseShape) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 

    CGContextTranslateCTM(pdfContext, 0, objectView.bounds.height) 
    CGContextScaleCTM(pdfContext, 1.0, -1.0) 
    CGContextDrawImage(pdfContext, objectView.bounds, image.CGImage) 
} 
UIGraphicsEndImageContext() 

注意,圖像倒置相比CGContext上正規圖紙,這就是爲什麼我調用CGContextTranslate恩CGContextScale。

不足之處在於,您可以在PDF中獲得子視圖的圖像,而不是簡單的文本。但是,如果分別爲每個視圖執行此操作,則可以繪製視圖,而無需像文本或任何您想要的那樣正確擦除。