【问题标题】:Apples ZoomingPDFViewer Example - Object creationApples ZoomingPDFViewer 示例 - 对象创建
【发布时间】:2012-07-12 03:53:20
【问题描述】:

我目前正在开发一个应该显示并允许用户缩放 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];
}

上面的代码做了什么?

第二个代码 sn -p 我又在 PDFView.m 中看不懂了:

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

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

我希望有人可以简短地回答我的问题,因为我不想使用我不理解的代码。

谢谢!

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢斯科特。你的回答让我朝着正确的方向前进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    相关资源
    最近更新 更多