3

ご存じかもしれませんが、CATiledLayerは、ビュー サイズに適した縮尺でタイル イメージを表示することにより、大きなイメージを表示するために使用されます。

私はCATiledLayeriOSのドキュメントの下にある例と同様の作業をしており、どの行と列のdrawRect:(CGRect)四角形がそのコンテンツを描画しようとしているかを計算します。

ビューが初めて表示されると、そのビュー/レイヤーの背後に何もない空のビューでタイルごとに描画が開始されます。最初に低解像度の画像を配置してレイヤーを埋め、次にタイル ビューの描画を開始しようとしています。

PDF ページを移動しているときと同じように、各ページは最初は非常に貧弱な画像で表示されますが、コンテンツのレイアウトを確認するには十分であり、特定のページで停止すると、このページがより明確になります。

catiledlayer の上にサブレイヤーを追加できることはわかっていますが、これは masterlayer であるため、catiledlayer の背後にレイヤーを配置することはできません。また、同じレイヤーに背景用の画像をロードして、適切にスケーリングできるようにすることも重要だと思います。

これを達成する方法を知っている人はいますか?

4

1 に答える 1

1

私はついにこれを理解し、重要なコメントに感謝します。

あなたがしなければならないこと:

  1. 関数 drawLayer:inContext: 内のすべての動的ロード ロジックを使用して、CATiledLayer のサブクラスを作成します。この関数は、View 内の drawRect: に似ています。
  2. 新しいサブクラス化された CATiledLayer を初期化します
  3. 低解像度画像で新しい CALayer を初期化
  4. 新しい UIView *myView = [UIView ...] または UIImageView を作成します (必要に応じて)
  5. 2 つのレイヤーを myView.layer に subLayer として配置します

UIView *imageView = [[UIView alloc] initWithFrame:viewFrame];

DCTiledLayer *tiledLayer = [[DCTiledLayer alloc] initWithData:myData];

CALayer *lowResLayer = [CALayer layer];
lowResLayer.position = CGPointMake(CGRectGetMidX(viewFrame), CGRectGetMidY(viewFrame));
lowResLayer.bounds = viewFrame;
lowResLayer.contents = (id)[lowResImage CGImage];

[imageView.layer addSublayer:lowResLayer];
[imageView.layer addSublayer:tiledLayer];

それは魅力のように機能します。:)

于 2012-08-17T07:07:03.487 に答える