[はじめてのiOSアプリ]xcodeで地図アプリを作成（その６）

# はじめに

iOSアプリを作ってみたいけど
何から始めて良いのかわからない

とりあえず、
「やってみました」記事を参考に
地図アプリを真似てみようと思う

という記事の６回目です。

今回は、拡大・縮小ボタンを追加します。

- ピンチイン・アウトあるから、拡大・縮小ボタンは不要では？
  - Simulatorでピンチアウト（Ctrl+Option+Click）するのは直感的じゃなく忘れがちじゃない？
  - 直感的なボタンがあれば、ピンチアウトの操作を忘れても影響ないから
  - 「やってみました」記事だし、ボタンを配置してみたかったから

# ボタンを追加
1. ボタンを配置
   - [Main storyboard]を表示する
     - 【なぜ？】
         - [MKMapView]の上にボタンを配置する前準備
   - メニューから[View]-[Show Library]を選択、表示されるウインドウで [button] と入力し [Button]を絞り込む<br>
<img width="727" alt="LibButtonItem.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/f1997b14-f761-1228-2989-cfbda2d91979.png">
     - 【なぜ？】
         - MapViewにボタンを配置したいから
         - 絞り込まなくても、探し出すことができればOK
  - [Button]をドラッグ＆ドロップでボタンをMapViewに配置する（「拡大」「縮小」の２箇所）
     - 【なぜ？】
          - 「拡大」「縮小」のふたつでセットだから
          - 邪魔にならず、操作に影響しないような任意の場所に配置する
          - 今回は、画面に左上付近にした<br>
<img width="1316" alt="SetButton.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/1a6cc9dd-20c1-2543-acf2-9c39987e86b3.png">
  - ボタンの文字[Button]を変更
     - 【なぜ？】
          - 何をするボタンなのかを見ただけでわかるようにするため
          - 今回は「＋」「ー」とした<br>
<img width="1316" alt="SetButtonRenamed.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/fa7a5b4e-418e-acbb-bd7d-8da06f363bb4.png">
  - メニューから[View]-[Inspectors]-[Show Attribute Inspector]を選択
     - 【なぜ？】
          - ボタンの文字サイズを変更したいから<br>
<img width="1316" alt="ShowRightSide.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/8f95058b-5927-cef5-a80b-a6ccde6c43d8.png">
  - [MapView]に表示されているボタンを選択し、[Attribute Inspector]に表示されている文字サイズを好きなサイズに変更
  - サイズ変更に合わせ、ボタン位置も調整
     - 【なぜ？】
          - デフォルトだと小さく見にくいから、見やすいように大きくする
          - ついでに、Boldにもした（お好きないように、ご自由に）<br>
<img width="1316" alt="ModButtonSize.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/5e7402f5-c284-3586-aa40-8cb6739d55c0.png">
1. ボタンの関連づけ
  - （以前の記事にも書いたように）[ViewController.swift]と[Main storyboard]を同時に表示する
     - 【なぜ？】
         - [Main storyboard]と[ViewController.swift]が同時に表示されていると[ボタン]の関連づけが容易にできるため
  - Ctrl+クリックで「＋」ボタンのOutletを表示
     - 【なぜ？】
         - ボタンのタップとプログラムを関連づけるため（前準備）<br>
<img width="246" alt="ButtonOutlet.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/06a1546f-a362-e1cf-4b7b-da71b1befed1.png">
  - [Touch Down]の右に表示されている○印を[ViewController.swift]にドラッグ＆ドロップ
     - ドロップ場所は、以下の場所

        ```swift:ViewController.swift
        var locationManager: CLLocationManager!
        
        // ここ付近にドラッグ＆ドロップ    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        ```
        - 【なぜ？】
          - ボタンのタップとプログラムを関連づけるため<br>
![EventDD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/8036cc8c-9b2f-fc28-0bc0-ecef823f2dc1.png)
  - 接続情報の入力を促すアイアログが表示されるので[Name]に[clickZoomin]と入力
     - 【なぜ？】
         - ボタンをタップしたときに実行する処理の名称ををプログラムで記述するため
        - ここまでの処理で、「＋」ボタンのタップとプログラムの関連づけが完了<br>
<img width="1272" alt="InputConnectionInfo.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521802/02b09a03-b436-db83-daeb-b4aa98827486.png">
  - 同様に「ー」ボタンにも同じような操作（[Name]は[clickZoomout]とする）を実施
     - 【なぜ？】
         - 「ー」ボタンでも同じような操作を行うため
         - ViewController.swiftの関連する部分は、以下のようになっているはず

    ```swift:ViewController.swift
    class ViewController: UIViewController, CLLocationManagerDelegate {
        @IBOutlet var mapView: MKMapView!
        var locationManager: CLLocationManager!
    
        @IBAction func clickZoomin(_ sender: Any) {
        }
        @IBAction func clickZoomout(_ sender: Any) {
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    ```
1. ボタンに対応する処理を記述
   - ViewController.swiftの該当部分を以下のように修正
     - 【なぜ？】
         - 今回は、ボタンをタップしたことが判別できればOKだから

         ```swift:ViewController.swift
         @IBAction func clickZoomin(_ sender: Any) {
             print("[DBG]clickZoomin")
         }
         @IBAction func clickZoomout(_ sender: Any) {
             print("[DBG]clickZoomout")
         }
         ```
1. テスト実行
   - Simulatorを起動し、「＋」ボタンや「ー」ボタンを押してみる
   - ボタンを押すたびに、Xcodeのログに位置情報に混ざり[clickZoomin][clickZoomout]出力された

     ```text:log
[DBG]latitude : 37.33124551
[DBG]clickZoomout
[DBG]longitude : -122.03073097
[DBG]latitude : 37.33121136
[DBG]clickZoomin
[DBG]clickZoomout
[DBG]longitude : -122.03072292
[DBG]latitude : 37.33117775
[DBG]clickZoomin
[DBG]longitude : -122.03071071
[DBG]latitude : 37.33114614
[DBG]clickZoomout
[DBG]longitude : -122.03069859
     ```

# 今回の到達点
- 画面に「拡大」「縮小」ボタンを配置することができた
- ボタンをタップすると、デバッグメッセージが表示された

# 連載
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その１：プロジェクト作成）](https://qiita.com/shinobee/items/1f6d26451336bf736484)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その２：地図表示）](https://qiita.com/items/50e1acee3024c3e26fb9)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その３：位置情報取得）](https://qiita.com/items/b8d287d2e34af20aab64)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その４：位置情報と連携した地図表示）](https://qiita.com/items/a91c49ebf5301d936120)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その５：アプリアイコン設定）](https://qiita.com/items/24804294ab86635ee5d3)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その６：拡大・縮小ボタン追加）](https://qiita.com/items/12c54c4e253bc48cad4d)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その７：地図を拡大・縮小）](https://qiita.com/items/4406c4fdf2fbdcc40533)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その８：地名表示）](https://qiita.com/items/3363779d0ea11ca6073c)
1. [[はじめてのiOSアプリ]xcodeで地図アプリを作成（その９：ソースコード管理）](https://qiita.com/items/d0e63020b0dce4c70542)

<!-- eof -->