kobasaです(´ω`*)
外部ディスプレイの設定が上手くいかなくて悩んでいました。
2Kのディスプレイに接続しているのに選択肢に2560×1440が出てこない?
購入したディスプレイの問題なのか、Mac側の問題なのかもわからなかったのですが、
やっと解決しました!option押しながら解像度変更ボタンクリックで出てきました!
なんで隠しコマンドみたいになってんだw
これで作業効率が上がるといいすねぇ。
130日目の勉強内容
マップを画面に表示させる
・ライブラリーから「MapKitView」を選択。UI上でマップを表示させたい範囲に編集する。
・「MapKit
」「CoreLocation
」をimport
する。
・「CLLocationManagerDelegate
」「UIGestureRecognizerDelegate
(長押しの操作)」
のプロトコルを宣言する。
これでマップ表示は終わり!表示させるだけなら簡単ですね!
ロングタップ(長押し)の設定
ライブラリから「Long Press Gesture Recognizer
」を選択し、
ロングタップの設定をしたい要素の上にドロップする。
UIバーの右から2番目に「Long Press Gesture Recognizer
」が表示されるので、
control+ドラッグでコードに紐付ける。このときactionとして使用する場合は、
Typeに「UILongPressGestureRecognizer
」を選択する(Anyではない)
@IBAction func longPressTap(_ sender: UILongPressGestureRecognizer) {
//タップを開始したときの処理
if sender.state == .began{
//タップを終了したときの処理
}else if sender.state == .ended{
}
}
マップ上から緯度と経度を取得する
ロングタップした位置から緯度と軽度を取得し、住所に変換するメソッドに渡す。
タップを終了したときの処理内に記述。
//画像のロングタップした位置を変数化
let tapPoint = sender.location(in: view)
//ロングタップした画像の位置(CGPoint)を指定してMKMapView上の
//緯度「latitude」経度「longitude」を取得
let center = mapView.convert(tapPoint, toCoordinateFrom: mapView)
let lat = center.latitude
let log = center.longitude
//取得した緯度経度を引数に指定し、住所に変換するメソッドを呼び出し
convert(lat: lat, log: log)
緯度と経度を住所に変換する(逆ジオコーディング)
緯度と経度から住所を割り出し、ラベルに表示させるメソッド。
やたらif文が多い。省略できるところがあるかも。
func convert(lat:CLLocationDegrees, log:CLLocationDegrees){
let geocoder = CLGeocoder()
let location = CLLocation(latitude: lat, longitude: log)
geocoder.reverseGeocodeLocation(location) { (placeMark,error) in
if let placeMark = placeMark{
if let pm = placeMark.first{
if pm.administrativeArea != nil || pm.locality != nil{
self.addressString = pm.name! + pm.administrativeArea! + pm.locality!
}else{
//都市がないような場所は名前を表示させる処理
self.addressString = pm.name!
}
}
self.addressLabel.text = self.addressString
}
}
}
geocoder.reverseGeocodeLocation(location) { (placeMark,error) in
の部分はクロージャーという書き方でplaceMark
かerror
の値が入った後に括弧内がよばれる。
クロージャーの中では「外で宣言した変数にはself
をつける」というルールがある。
取得した緯度経度のadministrativeAreaやlocalityが空白でなければ
name・administrativeArea・localityを足し合わせて、住所としてラベルに表示させる。
・name:町名から番地・建物名まで入る。
・administrativeArea:都道府県が入る。
・locality:市区町村が入る。日本で使用するならnameが最後の方が良いのでは?
地域名が空白の位置などをタップしてしまうとエラーになってしまうぽい。
今回はその辺りのバリデーションはなし。エラーを発生させない工夫は大変そうですね。
コメント