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