苹果ZoomingPDFViewer示例 - 对象创建

时间:2012-07-11 14:47:54

标签: objective-c ios

我正在开发一款应该展示并允许用户缩放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对象。但是如何创建它并不清楚。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

TiledPDFView.h类是UIView的子类,因此您可以看到UIView在该方法上有哪些文档。根据{{​​3}},它看起来像:

  

layerClass - 仅当您希望视图为其后备存储使用不同的Core Animation层时,才实现此方法。例如,如果您使用OpenGL ES进行绘图,则需要覆盖此方法并返回CAEAGLLayer类。

所以它似乎要求Core Animation系统使用平铺层。来自CATiledLayer的更多文档:

  

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