私は18000 x 18000 NASAの画像を描画するオープンソースプロジェクトを持っています。
このタスクを2つの部分に分割することをお勧めします。まず、スクロールします。 CodaFiが提案したように、スクロールするとCATiledLayersが提供されます。それぞれのCGImageRefはあなたが作成するCGImageRef、つまりあなたの本当に巨大なキャンバスのサブイメージです。ズームインとズームアウトを簡単にサポートできます。
2番目の部分は、キャンバスを描画するか、または別の方法で影響を与えるためにユーザーと対話しています。ユーザーがスクロールを停止すると、不透明なUIViewサブクラスを作成します。このサブクラスはメインビューにサブビューとして追加し、CATiledLayersをホストするビューをオーバーレイします。このビューを表示する必要がある瞬間に、適切な情報を表示して、大きなキャンバスのその部分を適切に描画できるようにします(このような色やそのような色の円など)。
このオーバーレイビューのdrawRect:メソッドを使用して図面を作成します。したがって、ユーザーがビューを変更するアクションを取ると、iOSにdrawRect:を呼び出させるために、必要に応じて "setDisplayInRect:"を行います。
ユーザーがスクロールする場合、ユーザーが行った変更を使用して大きなキャンバスモデルを更新し、不透明オーバーレイを削除して、CATiledLayersに大きな画像の適切な部分を描画させる必要があります。この移行はおそらく視覚障害を避けるためのプロセスの最も難しい部分です。
あなたのキャンバスに使用されるオブジェクト定義の配列が大きいとします。タイルのCGImageRefを作成する必要がある場合は、オブジェクトのフレームとタイルのフレームの重なりを探してスキャンし、そのタイルに必要な項目だけを描画します。
おそらく、自分のscrollViewに固定されたいくつかのCATiledLayersが完全になるでしょう。 – CodaFi