Ios viewForAnnotation未被激发
我正在地图上显示pin,但无法自定义注释视图的显示。由于某些原因,我的viewForAnnotation没有被调用。下面是didFinishLaunchingWithOptions方法Ios viewForAnnotation未被激发,ios,mapkit,Ios,Mapkit,我正在地图上显示pin,但无法自定义注释视图的显示。由于某些原因,我的viewForAnnotation没有被调用。下面是didFinishLaunchingWithOptions方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [mapView setDelegate:self]; location
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[mapView setDelegate:self];
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[mapView setShowsUserLocation:YES];
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
这是我的viewForAnnotation方法,它从未被调用过
- (MKAnnotationView *)mv:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
NSLog(@"viewForAnnotation");
if([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString *annotationIdentifier = @"AnnotationIdentifier";
MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationIdentifier];
[pinView setPinColor:MKPinAnnotationColorGreen];
pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
UIImageView *houseIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"house.png"]];
pinView.leftCalloutAccessoryView = houseIconView;
[houseIconView release];
return pinView;
}
-(MKAnnotationView*)mv:(MKMapView*)地图视图注释:(id)注释
{
NSLog(“注释视图”);
if([annotation isKindOfClass:[MKUserLocation类]])
返回零;
静态NSString*annotationIdentifier=@“annotationIdentifier”;
MKPinAnnotationView*pinView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:annotationIdentifier];
[pinView设置PinColor:MKPinAnnotationColorGreen];
pinView.animatesDrop=是;
pinView.canShowCallout=是;
UIImageView*houseIconView=[[UIImageView alloc]initWithImage:[UIIMAGENAME:@“house.png”];
pinView.leftCalloutAccessoryView=房屋图标视图;
[houseIconView发布];
返回pinView;
}
下面是didUpdateUserLocation方法:
- (void)mapView:(MKMapView *)mv didUpdateUserLocation:(MKUserLocation *)userLocation
{
NSTimeInterval t = [[[userLocation location] timestamp] timeIntervalSinceNow];
if(t < -180) return;
NSLog(@"%@",[textField text]);
MapPoint *mp = [[MapPoint alloc] initWithCoordinate:userLocation.location.coordinate title:[textField text]];
[mv addAnnotation:mp];
[mp release];
}
-(void)mapView:(MKMapView*)mv didUpdateUserLocation:(MKUserLocation*)userLocation
{
NSTimeInterval t=[[userLocation location]timestamp]TimeIntervalsIncenseNow];
如果(t<-180)返回;
NSLog(@“%@,[textField text]);
MapPoint*mp=[[MapPoint alloc]initWithCoordinate:userLocation.location.coordinate标题:[textField text]];
[mv addAnnotation:mp];
[mp发布];
}
必须将viewForAnnotation
委托方法命名为mapView:viewForAnnotation:
您的方法名为mv:viewForAnnotation:
编辑:以下是我在评论中建议的另外两个更改的示例:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
NSLog(@"viewForAnnotation");
if([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString *annotationIdentifier = @"AnnotationIdentifier";
MKPinAnnotationView *pinView = (MKPinAnnotationView *) [mapView
dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
if (!pinView)
{
pinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation
reuseIdentifier:annotationIdentifier] autorelease];
[pinView setPinColor:MKPinAnnotationColorGreen];
pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
UIImageView *houseIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"house.png"]];
pinView.leftCalloutAccessoryView = houseIconView;
[houseIconView release];
}
else
{
pinView.annotation = annotation;
}
return pinView;
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释
{
NSLog(“注释视图”);
if([annotation isKindOfClass:[MKUserLocation类]])
返回零;
静态NSString*annotationIdentifier=@“annotationIdentifier”;
MKPinAnnotationView*pinView=(MKPinAnnotationView*)[mapView
dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
如果(!pinView)
{
pinView=[[MKPinAnnotationView alloc]
initWithAnnotation:注释
reuseIdentifier:annotationIdentifier]autorelease];
[pinView设置PinColor:MKPinAnnotationColorGreen];
pinView.animatesDrop=是;
pinView.canShowCallout=是;
UIImageView*houseIconView=[[UIImageView alloc]initWithImage:[UIIMAGENAME:@“house.png”];
pinView.leftCalloutAccessoryView=房屋图标视图;
[houseIconView发布];
}
其他的
{
pinView.annotation=注释;
}
返回pinView;
}
你太棒了!知道了。不知道为什么我将名称从mapView更改为mv。呵呵,真有趣!还有两件事:您应该使用标识符为的dequeueReusableAnnotationView
,更大的问题是内存泄漏:在pinView上添加一个autorelease
。我使用了以下代码,但现在我要恢复默认的mkpinannotationview:mkpinannotationview*pinView=(mkpinannotationview*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];我将添加一个示例,说明该方法应该是什么样子。谢谢!我还想知道是否有任何方法可以更改MKPinAnnotationView或一般AnnotationView的大小。我想在AnnotationView中显示一个大图标。