DrawPdfPage()在CATiledLayer中使用时如何知道要绘制哪些部分?

时间:2011-03-10 14:20:06

标签: cocoa-touch xamarin.ios

在我的CATiledLayerDelegate中,我有以下代码来绘制PDF页面。这有效,但我不明白为什么! CATiledLayer应该问我画瓷砖。下面的代码总是绘制完整的PDF页面。不过我可以看到瓷砖一个接一个地出现。这有什么作用?

如果我是CATiledLayer的子类,我可以覆盖drawRect:它要求我绘制一个特定的矩形,但是使用委托不是这种情况。那魔术是如何运作的呢?

public override void DrawLayer (CALayer layer, CGContext context)
                {
                    context.SaveState ();
                    context.SetRGBFillColor (1.0f, 1.0f, 1.0f, 1.0f);
                    context.FillRect (context.GetClipBoundingBox ());
                    context.TranslateCTM (0.0f, layer.Bounds.Size.Height);
                    context.ScaleCTM (1.0f, -1.0f);
                    context.ConcatCTM (this.oParentController.oPdfPage.GetDrawingTransform (CGPDFBox.Media, layer.Bounds, 0, true));
                    context.DrawPDFPage (this.oParentController.oPdfPage);
                    context.RestoreState ();
                }

1 个答案:

答案 0 :(得分:0)

经过更多研究后想出来。 DrawLayer()实际上是绘制整个图层。然后,CATiledLayer负责将所需的图块传递给滚动视图。 这意味着:如果绘制的PDF页面足够大(内存方面),即使使用了平铺,iOS也会运行OOM。人们不得不像Goodreader的家伙那样从头开始编写平铺。