Ios viewForAnnotation未被激发

Ios viewForAnnotation未被激发,ios,mapkit,Ios,Mapkit,我正在地图上显示pin,但无法自定义注释视图的显示。由于某些原因,我的viewForAnnotation没有被调用。下面是didFinishLaunchingWithOptions方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [mapView setDelegate:self]; location

我正在地图上显示pin,但无法自定义注释视图的显示。由于某些原因,我的viewForAnnotation没有被调用。下面是didFinishLaunchingWithOptions方法

- (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中显示一个大图标。