CATiledLayer
現在、カスタム マップをスクロール ビューの使用からカスタム マップ タイルの使用MKMapView
に変換中ですMKTileOverlay
。-アプローチCATiledLayer
は一般的にうまく機能し、より見栄えがしますが、MKMapView
ローテーションなどを使用することで、他の方法では達成が非常に困難な多くのものを無料で取得できます。
そこで、ズーム レベル、列番号、行番号の推奨形式で使用するためにタイルを再描画し、マップ ビューに正しく表示するようにしました。私のマップ タイルはどこかの小さな領域しかカバーしていないことに注意してください。私はそれらを地球全体に持っているわけではありません。
最初に気付いた問題は、タイルがサポートする最大のズーム レベルを超えてズームインすると問題が発生するように見えることです。ズーム レベル 20 までタイルがあるので、MKTileOverlay
のmaximumZ
プロパティを 20 に設定します。レベル 21 にズーム インすると、マップ ビューはタイルをまったく要求しなくなります。レベル 21 に向かう途中でロードされたタイルは引き続き表示されます (ピクセル化されますが) が、スクロールしてそれ以上タイルをロードしないため、最終的にはマップが空白になります。理想的には、レベル 20 のタイルにフォールバックして代わりにそれらを表示するか、ユーザーがズームインしすぎないようにすることです。を使用するとCATiledLayer
、必要なだけズームインでき、常に最もズームインされたタイルが表示されます (タイルが「快適」であるよりもさらにズームインした場合でも)。例
他にも小さな問題があります。
true に設定canReplaceMapContent
すると、さらにズームインできます (これは問題ありません) が、近づきすぎるとカメラが地面を切り取ってしまい、あらゆる種類のレンダリング アーティファクトが発生します。それを防ぐ方法はありますか?例
タイル間に小さなピクセル サイズのレンダリング アーティファクトが存在する場合がありますMKMapView
。これらのアーティファクトは、ネイティブ マップ アプリには影響しないようです。これらを取り除く方法はありますか?例
ズームインしてパンすると、タイルが読み込まれるときに多くの白い閃光が見られます。これは明らかです。を使用したときCATiledLayer
、(不透明度をアニメーション化することによって) 非常にスムーズに読み込まれ、低ズーム レベルは既に背景に存在していたため、タイルを使用していることさえ全体的にわかりにくかったです。タイルをよりシームレスにロードする方法はありますか? 例
これらの質問のほとんどに対する答えは、 を使用して修正することはできないMKMapView
ということだと思います。ユーザーがマップの見出しを変更できるようにしたいのですが、標準を使用して行うのはかなり難しいように思われるため、これは残念ですCATiledLayer
!