1

変更された CGMutablePathRef を含む CGContext をどのようにシリアル化しますか?

現在、コンテキストを png 表現に保存してシリアル化していますが、Retina ディスプレイで問題が発生しています。

Retina バージョンをシリアル化し、実行時にサイズを変更することは非効率的であるため、避けたいと思います。

4

1 に答える 1

5

単一のパスをストロークまたは塗りつぶすだけの場合は、プロトコルにUIBezierPath準拠する でラップしてから、次をシリアル化できます。NSCodingUIBezierPath

UIBezierPath *uiPath = [UIBezierPath bezierPathWithCGPath:cgPath];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:uiPath];

次にdata、ファイルやデータベースなどに書き込むことができます。後で a に変換dataUIBezierPath、次に aに変換できCGPathます。

UIBezierPath *uiPath = [NSKeyedUnarchiver unarchiveObjectWithData:data];
CGPathRef cgPath = uiPath.CGPath;

単一のパスよりも複雑なものを描画している場合、描画をスケーラブル (ベクター) 形式でシリアル化する最も簡単な方法は、CGPDFContextではなく に描画することCGBitmapContextです。CGPDFContextは、描画コマンドを PDF に記録します。後で、CGPDFDocumentPDF の を作成し、それを使用して PDF をビットマップ コンテキストに描画できます。詳細については、* Quartz 2D Programming Guide* の PDF ドキュメントの作成、表示、および変換の章をお読みください。

于 2012-11-24T02:48:42.640 に答える