アプリを追加でカスタマイズ
前回は、「マップ・キット(Map Kit)」を使って地図を表示させ、一定間隔でピンを追加する機能をアプリに実装しました。今回は移動距離を計算して、それをツイッターに投稿するという機能を追加してみましょう。
移動したことを検出して、現在地の情報を更新するたびに呼ばれる関数には、新しい場所を表す「CLLocation」というオブジェクトが引数として渡されます。これまではこのオブジェクトの「coordinateプロパティ」を参照することで緯度・経度の情報を取得してきました。このオブジェクトには、ほかのCLLocationとの間の距離を計算する「distance()」という関数が用意されているので、今回はその関数を使って移動距離を計算してみます。
また、iOSに用意されている「Socialフレームワーク」は、わずか3行のコードを書くだけで自分のアプリにツイッターやフェイスブックへの投稿機能を追加できます。今回はこのdistance()関数とSocialフレームワークを組み合わせて使うことで実現させます。
【STEP 1】プロジェクトの設定を追加しよう
Xcodeで前回作ったプロジェクトを開きましょう。まずは左側のナビゲータ領域から、青いアイコンの[Walk Memory]と書かれたプロジェクト名を選択します。
画面中央上部の[General]タブを選択します。そして、画面中央下にある「Linked Frameworks and Libraries」の欄の「+」ボタンを押しましょう。
表示された画面から[Social.framework]を選んで、[Add]ボタンを押して追加します。これでアプリの中でSocialフレームワークが利用できるようになります。
【STEP 2】コードを追加する
画面左側のナビゲータ領域で[ViewController.swift]を選択して、プログラムのコードを書いていきます。Socialフレームワークのimport文を追加して、Socialフレームワークが使えるようにします。
また、距離を計算するための変数を2つと、ツイート機能のためのユーザインタフェイス部品の変数を2つ追加してください。
【STEP 3】関数の実装コードを書く
viewDidLoad()関数の最後に、ツイートボタンを作って画面に追加するためのコードを書きます。52行目のコードで、ボタンが押されると「距離をツイート」という名前の関数が呼ばれるように設定しています。
端末の位置情報が更新されていくたびに呼ばれるlocationManager()関数に、1つ前の位置と現在位置の距離を計算して、距離の変数に追加していくコードを追加します。1つ前の位置は常に最新の位置情報で上書きされます。距離はメートル単位です。
ViewControllerクラスの最下部に、ボタンが押されたときに呼ばれる「距離をツイート()」関数を追加します。この関数の中では、ツイート画面を生成し、ツイート文字列を設定してから表示します。距離の変数にround()関数を使うことで、小数点以下を四捨五入した値が取得できます。
完成したアプリをiPhoneにインストールしてしばらく歩き回ってみました。地図上に何個かピンが立ったところで左上の[ツイート]ボタンを押すと、歩いた距離をツイートできるダイアログが現れました。距離をリセットする機能はまだ用意できていませんが、アプリを強制終了させて起動し直すと、最初から距離を計測できます。
【まとめ】
今回は移動距離を計算してツイートする機能をアプリに追加しました。目標の距離を決めて散歩に出かけて、ツイッターを使いながら健康状態を管理するなど、便利に活用できます。
次回のテーマ
考え中…。
※今回のソースコードはMac Fan WEB上の本連載記事内に記載されたURLよりダウンロードできます。こちらを参照して、ぜひXcodeにチャレンジしてみましょう。
【冒険記】
「移動ログアプリを作ってみよう」の全3回で作ったアプリのViewController.swiftの行数はおよそ100行となりました。まとまったアプリを作るためには、100行くらいのコードが必要だといわれていますので、目安にしてみてください。
【冒険記】
この連載ではスウィフトを使っていますが、面白いことに、プログラミング言語が変わっても、コードの行数はそれほど大きくは変わりません。完成したアプリがどれくらいの規模になったのか、皆さんも行数を一つの尺度としてチェックしてみてください。
Dr.さざめき(aka.沼田哲史)
1978年1月生まれ。某大学でプログラミングを教えつつ、ふらっとヨーロッパ旅行に出かけて美味しいものを食べ歩いたり、時折、iOSプログラミングの本を出したり。Mac歴16年。いつかアメリカ西海岸でお昼から美味しいIPAビールを飲みながらプログラミングするのが夢です。Twitter @sazameki