Swift

Swift:タップした地点にピンを表示

正しいやり方があるはずですが、よくわからなかったので、力づくになってしまいました。

むずかしかったのは、 NSPressGestureRecognizerで地図がタップされたときに処理するメソッドを登録し、NSGestureRecognizerで座標を得るという点です。何はともあれ、地図をタップしてその地点にピンを立て、中心に持っていくことができるようになりました。これは久しぶりにうれしいでした。

@IBOutlet var   zOutMap:MKMapView!
var rcTapCount:Int  = 0

let LT = MesaConstant()

let wLongtap = NSPressGestureRecognizer(target:self, action: “ExecLongPress”)      //タップされたときの処理先を登録。
wLongtap.buttonMask = 0x1 //0x1:メインボタン
wLongtap.minimumPressDuration = 0.5//n sec押下
zOutMap.addGestureRecognizer(wLongtap) //タップされたときの処理を登録。

func ExecLongPress()
let sender = NSGestureRecognizer() //
if  sender.state == .Began || cm.rcTapCount == 0 { //
cm.rcTapCount  = 999 //
let wLoc = sender.locationInView(zOutMap)//タップ位置の座標をget
let wMapPoint:CLLocationCoordinate2D = zOutMap.convertPoint(wLoc, toCoordinateFromView:zOutMap)
ExecSetPinAtCenter(wMapPoint.latitude, pLong:wMapPoint.longitude, pAgain:true) //オーバレイとピンを地図にsetするメソッドの実行
} else {
cm.rcTapCount  = 0
}
}

注記: ExecSetPinAtCenterは、注釈通り、座標位置にオーバレイとピンを地図にsetするメソッドです。力づくになっている点は、.Beganが検出できなかったので、これをカウンタで判定している点です。

Categories: Swift, 技術