私はiOS6を使用していますが、これを達成するための数十の方法(スタックオーバーフローからの多くの方法を含む)を読みましたが、成功しませんでした。
これが私が試したもので、「ステージ」に分けられています。
UILongTouchGestureRecognizer
のロングタッチを受け取るためにを作成しますMKMapView
。- ストーリーボードを介してビアを追加し
UILongTouchGestureRecognizer
、接続インスペクターを介してアウトレットやデリゲートなどを接続してみました。 UILongTouchGestureRecognizer
プログラムで作成し、mapView
ターゲット、self
ターゲット、およびターゲットとして使用して初期化してみましたself.view
。
- ストーリーボードを介してビアを追加し
からselectorメソッドを使用してタッチジェスチャを受け取り、
UILongTouchGestureRecognizer
を取得しCGPoint
て、オブジェクトに変換しCLLocationCoordinate2D
ます。- 私はもう試した:
- [mapView convertPoint:(CGPoint)toCoordinateFromView:self.mapView]を使用します。
MKMapPoint aPoint = MKMapPointMake(aCGPoint.x, aCGPoint.y);
最初に使用し、次にを使用 しMKCoordinateForMapPoint(aMapPoint)
てを取得しCLLocationCoordinate2D
ます。- UILongPressGestureRecognizerに直接アクセスすることと
(UILongPressGestureRecognizer *)sender
、メソッド呼び出しからfromを使用してCGRectのx、yを取得することの両方。
- 私はもう試した:
結果
- 一言で言えば、使用する方法に関係なく、を使用して値をチェックするときに得たものです
NSLog
。-、から与えられたX、Yの場合UILongPressGestureRecognizer
、xは200から420の範囲で変動しているようです。Yの範囲は約400〜700です。-長いタッチによってトリガーされ、ログに印刷された緯度と経度は、奇妙なことに、85.051XX(緯度)および-179.9997XX(経度)の小数点以下の3番目から6番目の小数点以下の値でのみ変化します。
- 一言で言えば、使用する方法に関係なく、を使用して値をチェックするときに得たものです
これが私が試したコードの例です
- (void)viewDidLoad
{
NSLog(@"View did load");
[super viewDidLoad];
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:mapView action:@selector(handleLongPress:)];
mapView = [[MKMapView alloc] init];
}
- (IBAction)handleLongPress:(UILongPressGestureRecognizer *)sender
{
NSLog(@"CGPoint point: x - %f y - %f", point.x, point.y);
CGPoint point = [sender locationInView:self.mapView];
CLLocationCoordinate2D locCoord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
NSLog(@"Coords from \"locCoord\": lat - %f lng - %f", locCoord.latitude, locCoord.lon);
MKPointAnnotation *addAnnotation = [[MKPointAnnotation alloc] init];
[addAnnotation setCoordinate:
[self.mapView addAnnotation:addAnnotation];
}
私はこれに完全に困惑しているので、誰かが私を助けてくれることを願っています。
繰り返しになりますが、最終的な目標は、ユーザーが「mapViewを長押しした」場所の座標を取得し、その場所にピンをドロップすることです。