MKAnnotationView引脚不会出现

时间:2011-08-11 07:37:39

标签: iphone mapkit

我是MapKit及其所有功能的新手,因此坚持尝试显示引脚。我按照在线视频教程了解如何找到用户当前位置并在那里放置一个引脚。但是当我输入引脚的方法时,我根本得不到它。我想知道我在哪里出错了。

    - (void)viewDidLoad{
    [super viewDidLoad];

    self.title = @"Location";
    mapView.showsUserLocation = YES;
    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];
    [locationManager startUpdatingHeading];
}

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    NSLog(@"Annotation view run");
    MKPinAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentloc"];
    pin.animatesDrop = YES;
    return pin;
}

-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

// once location is determined, center to that location.
location = newLocation.coordinate;
MKCoordinateRegion region;
region.center = location;

MKCoordinateSpan span;
span.latitudeDelta = 0.003;
span.longitudeDelta = 0.003;
region.span = span;

[mapView setRegion:region animated:FALSE];

}

任何关于我做错的地方的建议都会很棒!

1 个答案:

答案 0 :(得分:1)

由于你的方法永远不会被调用,你应该这样做:

- (void)mapView:(MKMapView *)aMapView regionDidChangeAnimated:(BOOL)animated {
    [aMapView removeAnnotation:[self point]];
    mkShape.coordinate = aMapView.centerCoordinate;
    [aMapView addAnnotation:mkShape];
}

您应该正确创建MKAnnotationView。 您需要先在.h文件中创建两个属性(出于性能原因):

MKPointAnnotation *mkShape;
MKAnnotationView *annotationView;

然后使用下面的代码创建您的MKPointAnnotation

- (void)createShape
{
    if (!mkShape) {
        mkShape = [[MKPointAnnotation alloc] init];
        mkShape.title = nil;
        mkShape.subtitle = @"test description";
    }
}

- (id <MKAnnotation>)point
{
    [self createShape];

    // Make sure to check if this is an MKPointAnnotation.  MKOverlays also
    // conform to MKAnnotation, so it isn't sufficient to just check to
    // conformance to MKAnnotation.
    if ([mkShape isKindOfClass:[MKPointAnnotation class]])
        return (id <MKAnnotation>)mkShape;

    return nil;
}

- (MKAnnotationView *)annotationView
{
    if (!annotationView) {
        id <MKAnnotation> annotation = [self point];
        if (annotation) {
            MKPinAnnotationView *pin =
            [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
            pin.canShowCallout = YES;
            pin.animatesDrop = YES;
            pin.draggable = NO;
            annotationView = pin;
        }
    }
    return annotationView;
}


- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    if ([annotation isEqual:mkShape]) {
        return [self annotationView];
    }
    return nil;
}

最后,不要忘记释放你的房产。

- (void)dealloc
{
    [annotationView release];
    [mkShape release];

    [super dealloc];
}