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で私が理解できない2番目のコードスニペット:

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

CATiledLayerオブジェクトを作成することはわかっています。しかし、それがどのように作成されるかは私にはわかりません。

わからないコードは使いたくないので、誰かが私の質問に簡単に答えてくれるといいのですが。

ありがとうございました!

4

1 に答える 1

0

TiledPDFView.hクラスはUIViewのサブクラスであるため、UIViewがそのメソッドにどのようなドキュメントを持っているかを確認できます。私が見るドキュメントによると、それは次のように見えます:

layerClass-このメソッドは、ビューでバッキングストアに別のCoreAnimationレイヤーを使用する場合にのみ実装してください。たとえば、OpenGL ESを使用して描画を行う場合は、このメソッドをオーバーライドしてCAEAGLLayerクラスを返す必要があります。

したがって、CoreAnimationシステムにタイルレイヤーを使用するように要求しているようです。からのさらなるドキュメントCATiledLayer

CATiledLayerはCALayerのサブクラスであり、レイヤーのコンテンツのタイルを非同期的に提供する方法を提供し、複数の詳細レベルでキャッシュされる可能性があります。レンダラーはより多くのデータを必要とするため、レイヤーのdrawLayer:inContext:メソッドが1つ以上のバックグラウンドスレッドで呼び出され、データの1つのタイルを埋めるための描画操作を提供します。描画コンテキストのクリップ境界とCTMを使用して、要求されているタイルの境界と解像度を決定できます。レイヤーの領域は、setNeedsDisplayInRect:メソッドを使用して無効にすることができますが、更新は非同期になります。次のディスプレイの更新には更新されたコンテンツが含まれていない可能性がありますが、将来の更新には含まれます。

于 2012-07-11T19:53:20.370 に答える