0

我目前正在开发一个应该显示并允许用户缩放 PDF 页面的应用程序。因此,我正在查看 Apple 示例 ZoomingPDFViewer。基本上我理解示例代码。但是有几行对我来说并不明显。

示例代码链接:http: //developer.apple.com/library/ios/#samplecode/ZoomingPDFViewer/Introduction/Intro.html

在 PDFView.m 中:

//Set the layer's class to be CATiledLayer.
+ (Class)layerClass {
    return [CATiledLayer class];
}

上面的代码有什么作用?

第二个我在 PDFView.m 中看不懂的代码片段:

self = [super initWithFrame:frame];
    if (self) {        
        CATiledLayer *tiledLayer = (CATiledLayer *)[self layer];
        ...

我知道它创建了一个 CATiledLayer 对象。但是我不清楚它是如何创建的。

我希望有人能给我一个简短的回答,因为我不想使用我不理解的代码。

谢谢!

4

1 回答 1

0

TiledPDFView.h 类是 UIView 的子类,因此您可以查看 UIView 对该方法的文档。根据我看到的文档,它看起来像:

layerClass - 仅当您希望视图使用不同的核心动画层作为其后备存储时才实施此方法。例如,如果您使用 OpenGL ES 进行绘图,您可能希望覆盖此方法并返回 CAEAGLLayer 类。

所以它似乎要求核心动画系统使用平铺层。更多文档来自CATiledLayer

CATiledLayer 是 CALayer 的子类,提供了一种异步提供图层内容切片的方法,可能缓存在多个细节级别。由于渲染器需要更多数据,因此在一个或多个后台线程上调用图层的 drawLayer:inContext: 方法以提供绘图操作以填充一个数据块。绘图上下文的剪辑边界和 CTM 可用于确定所请求的图块的边界和分辨率。使用 setNeedsDisplayInRect: 方法可以使图层的区域无效,但是更新将是异步的。虽然下一次显示更新很可能不包含更新的内容,但未来的更新会。

于 2012-07-11T19:53:20.370 回答