iPhone新手来自Java。所以我在这个阶段的目标是允许用户在地图上“放置一个图钉”。我对地图的初始化如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"your view did load, I'm going to initizlie the map by your location");
CLLocationCoordinate2D location = theMap.userLocation.coordinate;
NSLog(@"Location found from Map: %f %f",location.latitude,location.longitude);
MKCoordinateRegion region;
MKCoordinateSpan span;
NSLog(@"coordinates: %f %f",location.latitude,location.longitude);
if (TARGET_IPHONE_SIMULATOR) {
NSLog(@"You're using the simulator:");
location.latitude = 40.8761620;
location.longitude = -73.782596;
} else {
location.latitude = theMap.userLocation.location.coordinate.latitude;
location.longitude = theMap.userLocation.location.coordinate.longitude;
}
span.latitudeDelta = 0.001;
span.longitudeDelta = 0.002;
region.span = span;
region.center = location;
[theMap setRegion:region animated:YES];
[theMap regionThatFits:region];
[theMap setMapType:MKMapTypeSatellite];
[theMap setZoomEnabled:YES];
[theMap setScrollEnabled:YES];
[theMap setShowsUserLocation:YES];
}
对于请求的引脚丢弃,我有
- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = nil;
if (annotation != theMap.userLocation) {
static NSString *defaultPinID = @"aPin";
pinView = (MKPinAnnotationView *)[theMap dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
if (pinView == nil)
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
} else {
}
pinView.pinColor = MKPinAnnotationColorRed;
pinView.canShowCallout = YES;
pinView.animatesDrop = YES;
return pinView;
}
我不确定我完全理解这个地图(地图)如何适用于viewForAnnotation
中的引脚?我的意思是,用户采取的操作将激活viewForAnnotation
方法?这段代码不起作用,我不知道为什么。
我正在使用模拟器,所以我不确定是否应该按下按钮或Alt click
它?
答案 0 :(得分:2)
我不确定我是否完全理解这个地图(theMap)如何在viewForAnnotation中为引脚工作?
MKPinAnnotationView
只是另一种注释视图 - 也就是说,您将一个注释(符合MKAnnotation
协议的对象)添加到地图中。当地图想要显示注释时(可能是因为用户滚动地图以便注释在视图中),它会要求您提供用于表示注释的视图。此时,您的mapView:viewForAnnotation:
方法可以获取或创建引脚注释视图并返回该视图。除滚动或缩放外,用户不会直接触发mapView:viewForAnnotation:
。
如果您希望用户能够删除一个引脚,那就不一样了。您需要提供可以拖动的视图(甚至可能是MKPinAnnotationView
)。当他们指示他们想要放下引脚时(可能通过抬起他们的手指),您将删除视图并在该点添加适当的注释。 然后地图视图会通过调用其委托的mapView:viewForAnnotation:
方法来要求您提供表示注释的视图。
此代码不起作用,我不确定原因。
您是否在地图中添加了任何注释?如果是这样,您是否正在查看应该显示它们的地图部分?
我猜你正在查看animatesDrop
属性,并希望它能够完成整个用户的固定交互。它没有这样做。将该属性设置为YES
仅仅会激活地图上显示的引脚。
答案 1 :(得分:1)
theMap.delegate = (id) self;
构造函数中的丢失了。一旦我这样做,最终用户的任何动作都将激活地图的其他方法(协议)。