投稿

ラベル(iOS)が付いた投稿を表示しています

SwiftUIでカスタム地図を表示する(その2)

イメージ
 その1ではカスタムタイルを表示しました。今度は手元で生成した情報を重ねてみます。 前回(その1) (予備知識) SwiftでPNG画像を作成する //カンバスを作る UIGraphicsBeginImageContext ( CGSize )  let context = UIGraphicsGetCurrentContext () //お絵描きをする(ぬりつぶす) context. setFillColor (fill) context. fill ( CGRect (x: 0 , y: 0 , width: 256 ,height: 256 )) //イメージオブジェクトに変換する         let tileImage = UIGraphicsGetImageFromCurrentImageContext () UIGraphicsEndImageContext () //PNGに変換する tileImage?. pngData () @Ushio, "UIGraphicsBeginImageContextの無駄",Qiita SwiftでのErrorの返し方 SwiftならErrorをEnumで定義すると明確なうえ、NSErrorにもそれらしくCASTされるようだ。 中安佑一,"[Swift] Swiftのエラー処理についてざっくりとまとめてみた", DevelopersIO, Classmethod reo0612, "swiftのErrorとNSErrorの違いがよく分からないので自分なりにまとめてみた", Qiita カスタムTileOverlayを作る PUNIO, "Xamarin.iOSで地図にTileを追加したりしてみる", プログラムの事とか,Hatena Blog (実際) PUNIOさんのコードをSwiftUIに移植しただけですが import UIKit import MapKit class CustomTileOverlay : MKTileOverlay { enum TileError:Error{ case getCurrentContext } override func load...

SwiftUIでカスタム地図を表示する(その1)

 観光地図やらクライムマップやらもっと便利に表示したいなと。 (予備知識)  SwiftUIでiOSアプリを書くには SwiftUIになって大きく変わったところがGUIの作り方。従来はstoryboardを使ってGUI部品を配置し、そのGUIを制御するUIViewをゴリゴリ書く感じでしたが、SwiftUIになって、GUI部品にレイアウトやら制御やらをまとめた感じ。  SwiftUIで地図を表示するには SwiftUIにはWKWebViewに相当するViewがないので、UIKitのWKWebViewをSwiftUI用にラップして使用する必要があります。これにはUIViewRepresentableプロトコルを使います。詳しくは 公式チュートリアル のとおり。 @k_awoki, "UIViewRepresentableを使ってSwiftUIでちょっとリッチなWebviewを表示してみる", Qiita @m37335, "【SwiftUI】Mapkitを使った位置情報の取得とピンの表示",Qiita  MapKitの基本 前述のようにMapKitはUIKitで、地図上にGUI部品を載せることができる。地図上の地点に関するGUI部品のアノテーション、画像や図形のGUI部品のオーバレイが用意されている。ここでややこしいことに、GUI部品のオブジェクトと、GUI部品を表示する部品を別々に用意してやらないといけない。 中安佑一, "[Swift][iOS] 京都御所に近ければ偉いだと?! せやったらそんな”はんなり”した地図アプリ作ったろやないか! – MKMapView使い方まとめ", DeveloversIO, Classmethod タイルデータを表示するには カスタムタイルをmapViewにオーバレイする。それには、 (1) タイルオーバーレイを供給するオブジェクトを登録する。 具体的には、MKTileOverlay()を用いて、地図に重ねるタイルデータ供給オブジェクトをつくり、mapViewオブジェクトにセットする。 (2) タイルオーバーレイをレンダリングするオブジェクトをmapViewオブジェクトにセットする。 具体的には 、mapViewのdelegateオブジェクトに、mapView(_ mapVi...