延迟后调用的地图视图viewForAnnotation

时间:2012-05-31 15:35:09

标签: ios mkmapview

我正在我的iPad应用程序中实现一项功能,以显示带有自定义注释的mapview。 出于某种原因, - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation :( id)注释方法在地图加载后1-2秒被调用,我想这是很多时间。

问题在于,如果您在加载引脚之前导航到mapview中的另一个视图,则应用程序会因访问权限错误而崩溃。因此,我认为不应该存在1-2秒的延迟。

没有什么特别之处,只有少数(3)引脚可供显示,所以它不应该是性能问题。

如果您有解决方法,请告诉我。

代码:

的MapViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self setTitle:self.pageTitle];

    [self.navigationController.navigationBar setTintColor:[UIColor lloydsNavBarTintColour]];
    [self.mapView setDelegate:self];

    MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } };
    region.center.latitude = 53.566414;
    region.center.longitude = -0.922852;
    region.span.longitudeDelta = 10.0f;
    region.span.latitudeDelta = 10.0f;
    [self.mapView setRegion:region animated:YES];


    ACNEfficiencyAnnotation *annotation = [[ACNEfficiencyAnnotation alloc]init];

    [annotation setCoordinate:CLLocationCoordinate2DMake(55.5783462524414,-4.39453077316284)];

    [self.mapView addAnnotation:annotation];
}

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
    self.annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];

    return self.annotationView;
}

注释实施:

@interface ACNEfficiencyAnnotation : NSObject <MKAnnotation>
{

}

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@property (nonatomic, strong) ACNEfficiencyLocation *location;

@end


@implementation ACNEfficiencyAnnotation

@synthesize coordinate;
@synthesize title;
@synthesize subtitle;
@synthesize location;

@end

2 个答案:

答案 0 :(得分:0)

您应该使用dequeueReusableAnnotationViewWithIdentifier在委托方法中准备注释,而不是使用viewController的属性进行重用。

viewController上的内存管理一定存在问题,检查您是否正在释放并在释放视图控制器并将视图卸载时将地图视图设置为nil。

答案 1 :(得分:0)

您正在设置属性self.annotationView,并在每次调用委托时创建新的MKAnnotationView。在viewDidLoad中实例化该属性,然后在委托方法中返回self.annotationView