2015-09-16 43 views
0

層有沒有什麼辦法來呈現託管的NSView(因爲它出現在屏幕上),以PDF或位圖文件一層不實現每個的CALayer的–drawInContext:方法(或類似的,每一層的委託的-(void)drawLayer:inContext:方法)?我只是希望NSView的內容完全按照它們出現時所用的最小的額外繪圖代碼。如何使託管的NSView提交

我已經閱讀了很多來源,說要渲染到PDF,你必須實現-drawInContext:,這是有意義的,如果你正在處理自定義圖層子類(否則,它會怎麼知道要畫什麼) ,但是我想要在將圖層添加到視圖時呈現「正常工作」的圖層,例如CATextLayer或CAShapeLayer。要重寫CATextLayer的代碼,告訴它如何在屏幕上完全具備這一功能時自己畫圖,看起來完全是多餘的。

我錯過了一些明顯的東西嗎?

回答

2

我已經成功地寫了一個視圖的圖層層次結構,使用下面的代碼的PDF:

- (void)renderToPath:(NSString *)filePath 
{ 
    NSImage *image = [[NSImage alloc] initWithSize:self.bounds.size]; 
    [image lockFocus]; 
    [self.layer renderInContext:[NSGraphicsContext currentContext].CGContext]; 
    [image unlockFocus]; 

    NSImageView *tempImageView = [[NSImageView alloc] initWithFrame:self.bounds]; 
    tempImageView.image = image; 
    NSData *pdf = [tempImageView dataWithPDFInsideRect:self.bounds]; 
    [pdf writeToFile:filePath atomically:YES]; 
} 

Here's a sample project

+0

我很抱歉...在重讀我的問題時,我意識到這有點讓人誤解;這個答案絕對適用於創建一個位圖PDF,但是有沒有類似的方式來創建純粹的矢量PDF(所以'CATextLayer's將保持可選文本,'CAShapeLayer's是獨立於分辨率等)?這就是'-drawInContext:'似乎需要而不是'-renderInContext:',但我沒有得到它的工作。你知道一種方法來適應矢量的代碼嗎? –

相關問題