私は現在、iOSのUIViewからCALayer
とrenderInContext
メソッドを使用してPDFドキュメントを作成しています。
私が直面している問題は、ラベルの鮮明さです。私は次のようUILabel
にオーバーライドするサブクラスを作成しました:drawLayer
/** Overriding this CALayer delegate method is the magic that allows us to draw a vector version of the label into the layer instead of the default unscalable ugly bitmap */
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
BOOL isPDF = !CGRectIsEmpty(UIGraphicsGetPDFContextBounds());
if (!layer.shouldRasterize && isPDF)
[self drawRect:self.bounds]; // draw unrasterized
else
[super drawLayer:layer inContext:ctx];
}
この方法では、鮮明なテキストを描くことができますが、問題は、私が制御できない他のビューにあります。またはに埋め込まれたラベルに対して同様のことを実行できる方法はありますUITableView
かUIButton
。ビュースタックを反復処理して、より鮮明なテキストを描画できるようにする方法を探していると思います。
次に例を示します。このテキストは適切にレンダリングされます(私のカスタムUILabelサブクラス)
標準のセグメント化されたコントロールのテキストはそれほど鮮明ではありません。
編集:次のように、PDFに描画するコンテキストを取得しています:
UIGraphicsBeginPDFContextToData(self.pdfData, CGRectZero, nil);
pdfContext = UIGraphicsGetCurrentContext();
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
[view.layer renderInContext:pdfContext];