MapKit注释未出现

时间:2014-12-07 00:49:51

标签: ios cocoa cocoa-touch mapkit

我在iOS应用程序中的地图上显示注释时遇到问题。

我遵循了文档中的约定。从调试开始,似乎永远不会为注释点调用viewForAnnotation。

View Controller的代码是:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super 
    // Do any additional setup after loading the view, typically from a nib.

    self.mapView.delegate = self;
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;

    [self.locationManager requestAlwaysAuthorization];

    [self.locationManager startUpdatingLocation];

    self.mapView.showsUserLocation = YES;
    [self.mapView setMapType:MKMapTypeStandard];
    [self.mapView setZoomEnabled:YES];
    [self.mapView setScrollEnabled:YES];

    self.locationManager.distanceFilter = kCLDistanceFilterNone;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [self.locationManager startUpdatingLocation];


    //View Area
    MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
    region.center.latitude = self.locationManager.location.coordinate.latitude;
    region.center.longitude = self.locationManager.location.coordinate.longitude;
    region.span.longitudeDelta = 0.005f;
    region.span.longitudeDelta = 0.005f;
    [self.mapView setRegion:region animated:YES];


    [self.mapView addAnnotations:[self createAnnotations]];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:YES];

}

- (void)didReceiveMemoryWarning {    
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
    {
        NSLog(@"viewForAnnotation");

        if([annotation isKindOfClass:[MKUserLocation class]]) {
            return nil;
        }

        MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] init];

        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"foo"];

        [pinView setPinColor:MKPinAnnotationColorGreen];
        pinView.animatesDrop = YES;
        pinView.canShowCallout = YES;

        return pinView; 
}

- (NSMutableArray *)createAnnotations
{
    NSMutableArray *annotations = [[NSMutableArray alloc] init];
    CLLocationCoordinate2D coord;
    coord.latitude = 37.4;
    coord.longitude = -122.2;
    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
    [annotations addObject:annotation];
    return annotations;
}

@end

1 个答案:

答案 0 :(得分:0)

createAnnotations方法中存在一个明显的问题:

CLLocationCoordinate2D coord;
coord.latitude = 37.4;
coord.longitude = -122.2;
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
[annotations addObject:annotation];


永远不会设置coordinate的{​​{1}}属性。

在创建annotation

后设置它
annotation