Get the coordinates of a point from mkmapview on iphone

前端 未结 5 1428
夕颜
夕颜 2020-12-08 22:36

I\'m trying to figure out how to put an annotation on a map based on where the user touches.

I have tried sub-classing the MKMapView and looked for the

相关标签:
5条回答
  • 2020-12-08 22:56

    so i found a way to do it, finally. If i create a view and add a map object to it with the same frame. then listen for hit test on that view, i can call convertPoint:toCoordinateFromView: on the touch point sent, and give it the map like so:

    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
        CLLocationCoordinate2D coord= [map convertPoint:point toCoordinateFromView:map];
        NSLog(@"lat  %f",coord.latitude);
        NSLog(@"long %f",coord.longitude);
    
        ... add annotation ...
    
        return [super hitTest:point withEvent:event];
    }
    

    this is pretty rough as is and as you scroll the map it still constantly calls hit test so you will need to handle that, but its a start at getting the gps coordinates from touching a map.

    0 讨论(0)
  • 2020-12-08 22:58

    Swift 2.2

    func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
        let point = gestureRecognizer.locationInView(mapView)
        let tapPoint = mapView.convertPoint(point, toCoordinateFromView: view)
        coordinateLabel.text = "\(tapPoint.latitude),\(tapPoint.longitude)"
    
        return true
    }
    
    0 讨论(0)
  • 2020-12-08 22:59

    Swift 4.2

    func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    
    for touch in touches {
        let touchPoint = touch.location(in: mapView)
        let location = mapView.convert(touchPoint, toCoordinateFrom: mapView)
        print ("\(location.latitude), \(location.longitude)")
    }}
    
    0 讨论(0)
  • 2020-12-08 23:05

    You can try this code

    - (void)viewDidLoad
    {
        UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(foundTap:)];
    
        tapRecognizer.numberOfTapsRequired = 1;
    
        tapRecognizer.numberOfTouchesRequired = 1;
    
        [self.myMapView addGestureRecognizer:tapRecognizer];
    }
    
    
    -(IBAction)foundTap:(UITapGestureRecognizer *)recognizer
    {
        CGPoint point = [recognizer locationInView:self.myMapView];  
    
        CLLocationCoordinate2D tapPoint = [self.myMapView convertPoint:point toCoordinateFromView:self.view];
    
        MKPointAnnotation *point1 = [[MKPointAnnotation alloc] init];
    
        point1.coordinate = tapPoint;
    
        [self.myMapView addAnnotation:point1];
    }
    

    All the best.

    0 讨论(0)
  • 2020-12-08 23:10

    A bit of dead thread digging but as this is the top result in Google it may be worth it:

    You can use the tap and hold gesture recognizer in order to get the coordinates and drop a pin on the map. Everything is explained at freshmob

    0 讨论(0)
提交回复
热议问题