我在Map View中有一个初始丢弃的引脚。
我想要完成的是将该引脚拖动到地图中的任何位置,并从该引脚获取新坐标。怎么做?我应该添加什么?
我有这种方法,我可以在其中执行初始丢弃引脚。
- (void) performSearch
{
MKLocalSearchRequest *request =
[[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = _searchString;
request.region = _mapView.region;
_matchingItems = [[NSMutableArray alloc] init];
MKLocalSearch *search =
[[MKLocalSearch alloc]initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse
*response, NSError *error) {
if (response.mapItems.count == 0)
NSLog(@"No Matches");
else
for (MKMapItem *item in response.mapItems)
{
[_matchingItems addObject:item];
annotation = [[MKPointAnnotation alloc]init];
annotation.coordinate = item.placemark.coordinate;
annotation.title = item.name;
[_mapView addAnnotation:annotation];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (annotation.coordinate, 800, 800);
[_mapView setRegion:region animated:NO];
}
}];
}
答案 0 :(得分:2)
首先,遵守MKMapViewDelegate
//ViewController.m
@interface ViewController () <MKMapViewDelegate>
@end
然后,将地图视图的委托设置为self
-(void)viewDidLoad {
[super viewDidLoad];
_mapView.delegate = self;
...
...
}
然后实现以下两个委托方法。
第一个委托方法返回与注释对象关联的视图,并将此视图设置为可拖动,
第二种方法,处理注释视图的拖动状态。
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation {
MKPinAnnotationView *pin = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"pin"];
if(!pin) {
pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reueseIdentifier:@"pin"];
} else {
pin.annotation = annotation;
}
pin.draggable = YES;
return pin;
}
这里我们要求MKPinAnnotationView
标识符@“pin”,
如果我们没有收到回来,我们就是创建它
然后我们将视图设置为可拖动。
以上内容足以移动,因此更改注释的坐标 如果您想在设置新坐标时调用某个方法,可以使用第二个委托方法执行此操作 -
-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState {
{
if(newState == MKAnnotationViewDragStateStarting) {
NSLog(@"%f, %f", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude);
}
if(newState == MKAnnotationViewDragStateEnding) {
NSLog(@"%f, %f", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude);
// Here you can call whatever you want to happen when to annotation coordinates changes
}
}
在这里确定拖动实际结束的时间,然后您可以调用任何您喜欢的方法来处理新坐标。
请注意,当拖动开始和结束时,我还包含NSLog
来电
这仅用于调试目的,因此您将看到坐标实际上正在被更改。