所以我试图基于触摸 MKMapView 来获得 CLLocation。然后,我尝试对位置进行反向地理编码。
if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
// Not sure if this is the right method to get the location or not
CLLocationCoordinate2D coordinate = [self.mapView convertPoint:[gestureRecognizer locationInView:self.mapView] toCoordinateFromView:self.mapView];
CLLocation *pinLocation = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:pinLocation completionHandler:^(NSArray *placemarks, NSError *error) {
if (placemarks && placemarks.count > 0) {
CLPlacemark *topResult = [placemarks objectAtIndex:0];
AddressAnnotation *anAddress = [[AddressAnnotation alloc] initWithPlacemark:topResult];
[self.mapView addAnnotation:anAddress];
[self.addressesArray addObject:anAddress];
}
else {
AddressAnnotation *anAddress = [[AddressAnnotation alloc] initWithCoordinate:coordinate];
[self.mapView addAnnotation:anAddress];
[self.addressesArray addObject:anAddress];
}
}];
使用我的 if/else 语句,我想要做的是触摸地图并获取 CLLocation。如果我可以对位置进行反向地理编码,请删除带有地址的图钉。如果我无法对位置进行反向地理编码,请放下图钉并在地图标注中显示纬度和经度。
它似乎不起作用。似乎即使我在某个位置触摸地图,反向地理编码也会使我的 pin 转到反向地理编码可以找到该位置的其他地方。这不是我想要的行为。无论如何我都想放下别针,如果我不能在标注中显示地址,只需显示纬度/经度。
如果我完全删除 revseGeocodeLocation:pinLocation 代码,并且只使用 else 块中的内容,那么我会得到 lat/long 并且无论如何都会将 pin 丢弃在那里。反向地理编码器阻止我将大头针放到我想要的地方有什么原因吗?
作为旁注,任何人都可以确认我根据 UITapGestureRecognizer 计算 CLLocationCoordinate2D 的方式是否正确?
谢谢!