Swift MkMapViewで地図アプリ作成してみた（07）- 地図の表示タイプを切り替える

#記事一覧
[Swift MkMapViewで地図アプリ作成してみた（記事一覧）](https://qiita.com/rain_00_00_09/items/3151b3faf2303fe78312)

#地図表示タイプを切り替えるボタンを配置する

UIButtonの変数を定義する。

```swift:ViewController.swift：UIButtonの変数を定義する
class ViewController:   UIViewController,
                        CLLocationManagerDelegate,
                        UIGestureRecognizerDelegate {
    
    var mapViewType: UIButton!
```

コード上からボタンを配置する。

```swift:ViewController.swift：ボタンを配置
        // 地図表示タイプを切り替えるボタンを配置する
        mapViewType = UIButton(type: UIButton.ButtonType.detailDisclosure)
        mapViewType.frame = CGRect(x:width - 50, y:60, width:40, height:40)
        mapViewType.layer.backgroundColor = UIColor(white: 1, alpha: 0.8).cgColor // 背景色
        mapViewType.layer.borderWidth = 0.5 // 枠線の幅
        mapViewType.layer.borderColor = UIColor.blue.cgColor // 枠線の色
        self.view.addSubview(mapViewType)
```

#タッチダウンを検出して地図の表示タイプを切り替える

タッチダウン時にCallする関数を定義する。

```swift:ViewController.swift：タッチダウン時にCallする関数
    // 地図の表示タイプを切り替える
    @objc internal func mapViewTypeBtnThouchDown(_ sender: Any) {
        switch mapView.mapType {
        case .standard:         // 標準の地図
            mapView.mapType = .satellite
            break
        case .satellite:        // 航空写真
            mapView.mapType = .hybrid
            break
        case .hybrid:           // 標準の地図＋航空写真
            mapView.mapType = .satelliteFlyover
            break
        case .satelliteFlyover: // 3D航空写真
            mapView.mapType = .hybridFlyover
            break
        case .hybridFlyover:    // 3D標準の地図＋航空写真
            mapView.mapType = .mutedStandard
            break
        case .mutedStandard:    // 地図よりもデータを強調
            mapView.mapType = .standard
            break
        }
    }
```

タッチダウン時に作成した関数をCallする。

```swift:ViewController.swift：タッチダウン時に作成した関数をCall
        mapViewType.addTarget(self, action: #selector(ViewController.mapViewTypeBtnThouchDown(_:)), for: .touchDown)
```

PCシミュレータで実行した結果は以下の通り。

| mapType            | 説明               | 画像 |
|:--                 |:--                |:--|
|.standard           |標準の地図           |<img width="150" alt="map1.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/4ede9d9e-c26d-d0a4-0f99-9a1d3f0f9722.png">|
|.satellite          |航空写真             |<img width="150" alt="map2.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/8b09b605-301f-02cc-730d-e7c563a58b38.png">|
|.hybrid             |標準の地図＋航空写真   |<img width="150" alt="map3.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/b3c57df6-5183-3c12-c2fe-79045dc32ee9.png">|
|.satelliteFlyover   |3D航空写真           |<img width="150" alt="map4.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/68468bbc-d338-1da7-cfcd-33cfa672152c.png">|
|.hybridFlyover      |3D標準の地図＋航空写真 |<img width="150" alt="map5.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/8cd85b5e-9e99-079a-b0a5-500d0418e524.png">|
|.mutedStandard      |地図よりもデータを強調 |<img width="150" alt="map6.png" src="https://qiita-image-store.s3.amazonaws.com/0/362635/321e78ee-d5d9-b4d6-b0f0-c979b2bc697a.png">|

#参考文書
[MKMapType - MapKit | Apple Developer Documentation](https://developer.apple.com/documentation/mapkit/mkmaptype)