Appleのmapkitフレームワークを使用してアプリを作成しています。私がやりたいのは、あなたが押した場所から経度と緯度を取得することです。このコードを使用して、ユーザーの現在の場所から座標を取得します。
- (IBAction)longpressToGetLocation:(id)sender {
CLLocationCoordinate2D location = [[[self.mapView userLocation] location] coordinate];
NSLog(@"Location found from Map: %f %f",location.latitude,location.longitude);
}
ユーザーの場所ではなく、押された場所を表示するコードを取得するにはどうすればよいですか?
class mapviewCtrl: UIViewController, UIGestureRecognizerDelegate
{
@IBOutlet var mapViewVar: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
let lpgr = UILongPressGestureRecognizer(target: self, action:"handleLongPress:")
lpgr.minimumPressDuration = 0.5
lpgr.delaysTouchesBegan = true
lpgr.delegate = self
self.mapViewVar.addGestureRecognizer(lpgr)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) {
if gestureReconizer.state != UIGestureRecognizerState.Ended {
let touchLocation = gestureReconizer.locationInView(mapViewVar)
let locationCoordinate = mapViewVar.convertPoint(touchLocation,toCoordinateFromView: mapViewVar)
println("Tapped at lat: \(locationCoordinate.latitude) long: \(locationCoordinate.longitude)")
return
}
if gestureReconizer.state != UIGestureRecognizerState.Began {
return
}
}
Swift 4。
class mapviewCtrl: UIViewController, UIGestureRecognizerDelegate
{
@IBOutlet var mapViewVar: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
self.setMapview()
}
func setMapview(){
let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(mapviewCtrl.handleLongPress(gestureReconizer:)))
lpgr.minimumPressDuration = 0.5
lpgr.delaysTouchesBegan = true
lpgr.delegate = self
self.mapViewVar.addGestureRecognizer(lpgr)
}
@objc func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) {
if gestureReconizer.state != UIGestureRecognizerState.ended {
let touchLocation = gestureReconizer.location(in: mapViewVar)
let locationCoordinate = mapViewVar.convert(touchLocation,toCoordinateFrom: mapViewVar)
print("Tapped at lat: \(locationCoordinate.latitude) long: \(locationCoordinate.longitude)")
return
}
if gestureReconizer.state != UIGestureRecognizerState.began {
return
}
}
}
Swiftの別の方法はこれです:これはいくつかのスニペットのマッシュアップです-オーバーライドを使用すると、便利でモジュール性を強化し、仮定と可能性を取り除くことができる1つの場所でコードを更新するだけですクラッシュポイント。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// Let's put in a log statement to see the order of events
print(#function)
for touch in touches {
let touchPoint = touch.location(in: self.mapView)
let location = self.mapView.convert(touchPoint, toCoordinateFrom: self.mapView)
print ("\(location.latitude), \(location.longitude)")
}
}