0

ワークスペースが大幅に縮小されている場合に、何百もの画像に CATiledLayers を使用するとうまく機能するように、レイヤーでホストされたワークスペースが機能しています。すべての画像は低解像度の表現を使用しており、多数の画像をパンおよびズームするときのアプリケーションの応答性が大幅に向上しています。

ただし、私のアプリケーション内では、サイズ変更ハンドルを使用してレイヤーのサイズを変更する機能も提供しています。イメージ レイヤを CATiledLayers を使用するように変換する前に、サイズ変更デルタ (マウス ドラッグ) に従ってイメージ レイヤの境界を操作することでレイヤのサイズ変更を行っていましたが、うまくいきました。しかし、CATiledLayers が配置されたので、境界操作によるレイヤーのサイズ変更と、スケール変換によるワークスペースのズーム/ズーム解除を混在させると、CATiledLayers が混乱する原因になります。

具体的には、CATiledLayer のサイズを幅/高さのサイズの半分 (領域の 1/4) に変更すると、その中の画像が突然サイズ変更されたフレームの 1/2 に拡大され、フレームの 3/4 が空のままになります。これはまさに、内部の CATiledLayer ロジックが呼び出されて低解像度の画像表現を提供するときのようです。サイズ変更ハンドラーに触れず、ワークスペースをズーム/ズーム解除するだけで問題なく動作します。

ズーム/サイズ変更を CATiledLayers とうまく組み合わせる方法はありますか? または、レイヤーのサイズ変更ロジックを変換して、境界操作の代わりにスケール変換を使用する必要がありますか?

4

1 に答える 1

2

I ended up solving this by converting my layer resize logic to use scale transforms by overriding the setBounds: method for my custom image layer class to scale it's containing CATiledLayer, and repositioning accordingly. Also it is important to make sure the CATiledLayer's autoresizingMask is set to kCALayerNotSizable since we are handling resizes manually in setBounds:.

Note: be sure to call the superclass's implementation of setBounds:.

于 2010-12-14T09:14:23.037 に答える