前置き
昨日のエントリの続きで、ジオコーディング(住所→緯度・経度変換)のソースコードを確認するためのアプリを作ったんですが、変換結果の緯度・経度が意図した座標を指しているか確認するための第一段階として、タイトル通り「ラベルをタップして内容をクリップボードにコピー」して、GoogleMapなり、ブラウザなりにペーストできるようにしました。
開発環境
端末:MacBook Pro/MacOS 10.14.5(Mojave)
Xcode:10.2.1
Swift:5
画面イメージ
"PUSH ME!!"を押してジオコーディング |
---|
タップ→ペーストで緯度・経度コピーを確認 |
---|
GoogleMapでみるとスカイツリーを指している |
---|
ソースイメージ
少し画面イメージとギャップがありますが、
「緯度」の値をタップしてクリップボードにコピーする処理を抽出すると
下記のようになりました。
class ViewController: UIViewController {
// 緯度の部分をタップすると緯度経度を取得する
@IBOutlet weak var lblLat: UILabel!
let myTGLat = UITapGestureRecognizer()
override func viewDidLoad() {
super.viewDidLoad()
// タップを検知できるようにして、
// その際に行う動作を定義する
lblLat.isUserInteractionEnabled = true
myTGLat.addTarget(self, action: #selector(tapLblLat(_:)))
lblLat.addGestureRecognizer(myTGLat)
// 以下、何かしらの処理をして、
// 緯度に表示させたい値を取得、セット
}
// 緯度を表示するラベルをタップした際に呼ばれる処理
@objc func tapLblLat(_ sender:UITapGestureRecognizer) {
// lblLatに表示された値をクリップボードにコピー
UIPasteboard.general.string = lblLat.text!
// ※UIPasteboard.general.setValue では、
// iOS11では動かないらしい。
}
}
早めにアウトプットしたいので、一部抽出したロジックになりましたが、実際組んだモノのロジックがもう少し整理できたらちゃんと書き直したいと思います。
ハマったポイントなど
今回はサンプルが充実していたコトもあって、ハマったトコはありませんでした。
しいて言えば、何度ラベル部分をタップしてもデバッグ用に入れていたログ出力処理が動かず、結果XXX.isUserInteractionEnabled = true
を入れ忘れていたのが原因だった、くらいです。
これから
ジオコーディング結果を別画面で表示した地図上にピンを立てるところまでは発展させたいなぁ、と。
あと、ジオコーディングのところをQiitaのエントリとしてアウトプットできていないので、その部分はまた改めて。(info.plistの設定やら、注意点が多いから忘れないようにしたい。)