1

UIView から PDF を作成したい。ここで、レイヤーをコピーして、DIN A4 ページ サイズにサイズ変更します。

CGRect A4PageRect = CGRectMake(0, 0, 595, 842);
CALayer *myLayer = [pdfView layer];
myLayer.bounds = pageRect;

しかし、このコーディは画面上の可視レイヤーのサイズを変更します。

レイヤーの内容をコピーして、A4 ページに収まるようにサイズを変更するにはどうすればよいですか?

助けてくれてありがとう、ジュリアン

4

3 に答える 3

3

FWIW、CALayerビアの浅いコピーを作成できます:

(スイフト3)

let tmp = NSKeyedArchiver.archivedData(withRootObject: myLayer)
let copiedCA = NSKeyedUnarchiver.unarchiveObject(with: tmp) as! CALayer

(または、使用しているサブクラス。例CAShapeLayer)

おかげで: https://stackoverflow.com/a/35345819/1452758

于 2017-03-06T02:27:09.597 に答える
2

CALayer を複製する方法はありません。

(CoreAnimation がそれを賢明な方法で実装するのは難しいでしょう。サブレイヤーのツリー全体が存在する可能性があり、それらすべてがその動作に影響を与えるデリゲートを持っている可能性があります。これは、レイヤーのコピーから突然要求を取得することを期待していません。 .)

私はあなたの正確な状況を理解していないので、より良い解決策を推測することしかできません. サイズを変更しようとしている PDF がありますか? それとも、任意の既存のレイヤーを取得して、そこから PDF ドキュメントを作成したいですか?

後者の場合:

  1. UIGraphicsBeginPDFContextToDataまたはを使用UIGraphicsBeginPDFContextToFileして PDF 描画コンテキストを作成する
  2. UIGraphicsBeginPDFPageまたはに電話UIGraphicsBeginPDFPageWithInfoしてページを作成する
  3. UIGraphicsGetCurrentContextPDF 描画コンテキストを取得するために呼び出します
  4. レイヤーCGContextScaleCTMがPDFページに収まるようにスケーリングします
  5. -[CALayer renderInContext:]レイヤーを PDF コンテキストに描画するための呼び出し
  6. 電話UIGraphicsEndPDFContextして PDF を完成させる

これはひどく見えるかもしれないことに注意してください。レイヤーはビットマップ ベースであるため、PDF でビットマップを取得します。また、-[CALayer renderInContext:]画面上とまったく同じようにはレンダリングされません。ドキュメントの注を参照してください。

これが問題になる場合は、CALayer をバイパスする別の描画パスを追加する必要があります。ステップ 5 では、CoreGraphics を使用して独自の描画を行います。

于 2012-04-08T01:28:54.133 に答える