use*_*949 8 iphone cocoa-touch objective-c mapkit
我正在使用mapkit在地图上绘制超过500个点.与原生谷歌地图应用相比,缩放有点紧张.我发现了导致缓慢的原因.我正在添加自定义注释,以便稍后可以为细节视图添加不同的引脚颜色和按钮:
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(AddressNote *) annotation {
MKPinAnnotationView *annView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"currentlocation"];
annView.pinColor = MKPinAnnotationColorGreen;
annView.animatesDrop=TRUE;
annView.canShowCallout = YES;
annView.calloutOffset = CGPointMake(-5, 5);
return annView;
}
Run Code Online (Sandbox Code Playgroud)
如果我注释掉上面的代码,一切正常.放大/缩小非常流畅.我应该以不同方式添加注释以提高性能吗?
500注释可能太多了,但是当你只查看其中一些时,性能会受到影响.但是,您应该使用带注释的dequeueing来提高性能
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id <MKAnnotation>)annotation
{
MKPinAnnotationView *view = nil;
if (annotation != mapView.userLocation) {
view = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"identifier"];
if (nil == view) {
view = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"identifier"] autorelease];
}
[view setPinColor:MKPinAnnotationColorGreen];
[view setCanShowCallout:YES];
[view setAnimatesDrop:NO];
}
else {
// Do something with the user location view
}
return view;
}
Run Code Online (Sandbox Code Playgroud)
此外,使用500个引脚,投影动画需要很长时间才能完成.你应该把它关掉[view setAnimatesDrop:NO]
在我看来,向 iPhone 屏幕大小的地图部分添加 500 个地图点是没有意义的。您无法将其可视化,甚至无法单击正确的注释。
您不能查看地图的缩放级别和中心,然后决定仅向地图添加注释子集吗?
我想我也见过其他应用程序这样做。