0

ズームレベルが深くなるたびにズームレベルをリセットして、無限にズームできるようにする方法はありますか?

各タイルの色が異なる CAtiledLayer を作成しようとしています。タイルをズームすると、新しい色が得られます。

4

1 に答える 1

2

CATiledLayer でこれを行う方法についてはよくわかりませんが、Matt Neuburg による本 Programming IOS 4 には、UIScrollView を使用して同様のことを行う方法を説明するセクション「Zooming with Detail」が含まれています。

UIScrollView は、コンテンツへのピンチアウト ズームをサポートしていますが、より高い zoomScale でコンテンツを再レンダリングするのではなく、スケール変換を使用してコンテンツのズームされていないレンダリングを拡大するだけです。したがって、実際に拡大された詳細を表示するズームを提供するには、いくつかのロジックを追加する必要があります。

基本的に、この本は scrollViewDidEndZooming:withView:atScale: を実装して、(1) UIScrollView の zoomScale をデフォルト値の 1.0 にリセットし、(2) コンテンツ ビューを削除して、目的の真のズーム スケールでコンテンツを含む新しいビューを提供することを提案しています。 . この実際のスケールを手動で追跡するには、独自の ivar を導入する必要があります。その結果、さらにズームインし、実際のスケールが単調に増加し続けると、UIScrollView は一連の異なるビューを格納し、その範囲内で独自の zoomScale を 1.0 から最大まで循環させ、次に 1.0 にリセットし、次に 1.0 から最大にします。など。この本は骨組みの例を示している (初版の 506 ページ、本の第 2 版)。

これをエンドレスズームにどのように使用しますか? 真に無限のズームが必要ない場合は、真のスケールの非常に広い範囲で上記を実行できます。

真に無限のズームが必要な場合は、真のスケールの有限境界変数でズーム レベルを追跡することはできません。代わりに、scrollViewDidEndZooming:withView:atScale: を変更して、(1) UIScrollView の zoomScale をデフォルト値の 1.0 にリセットし、(1) コンテンツ ビューを削除して新しいビューを提供します。 1.0 は、古い zoomLevel で削除されたビューと視覚的に同じです。このように、ユーザーがピンチアウト ジェスチャでズームインし続けると、UIScrollView は 1.0 から最大値まで繰り返し循環し、ユーザーのジェスチャの間に、各サイクルで基になるビューを目に見えないように置き換えます。

于 2011-10-26T10:21:12.043 に答える