4

PDF ページを CGContext に描画しています。

適切に描画するために、コンテキストにいくつかの変換を適用しています。

rect でレンダリングされた PDF ページは、ビューの rect よりも小さいです。

PDF がレンダリングされたビューの一部とまったく同じフレームを持つ 3 番目のビューを作成したいと考えています。

私の解決策は機能しますが、完全ではありません。時々 (多くの場合) rect が間違っています。

これは私がやっていることです:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {
      CGContextSaveGState(context);
      // apply transforms to context
      // draw pdf page

      CGRect calculatedFromRect = CGRectApplyAffineTransform(pageRect, CGContextGetCTM(context));
      CGContextRestoreGState(context);

      // now draw a green rect to test the frame on a not transformed context
      GContextSetFillColorWithColor(context, [UIColor greenColor].CGColor);
      CGContextFillRect(context, calculatedFromRect);

      self.thirdView.frame = calculatedFromRect;
 }

thirdView は赤です。両方の四角形 (ビューと描画) が等しい場合、画面に茶色の四角形が表示されます (緑の四角形の上にアルファが付いた赤)。しかし、時々、2つが互いに分離しているのを見ることができます(オフセットとサイズの違い...これが発生すると、thirdView.frameはcalcularedRectよりも大きくなります)。

関連するすべてのビューのサイズと座標は同じであるため、 convertRect:fromView: で座標を変換しなくても問題ありません。しかし、私はこれを試しましたが、結果は同じでした。

4

0 に答える 0