jma*_*ans 13 iphone cocoa-touch google-maps objective-c ipod-touch
UPDATE
看起来这个问题已经在iOS 4.3中得到了悄悄修复.到目前为止,被认为"足够远"以便注释被回收的距离似乎是数百英里,即使在非常接近地放大时也是如此.当我使用iOS 4.3 SDK构建我的应用程序时,注释会根据更合理的限制进行回收.
有没有其他人遇到这个问题?这是代码:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(WWMapAnnotation *)annotation {
// Only return an Annotation view for the placemarks. Ignore for the current location--the iPhone SDK will place a blue ball there.
NSLog(@"Request for annotation view");
if ([annotation isKindOfClass:[WWMapAnnotation class]]){
    MKPinAnnotationView *browse_map_annot_view = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"BrowseMapAnnot"];
    if (!browse_map_annot_view) {
        browse_map_annot_view = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"BrowseMapAnnot"] autorelease];
        NSLog(@"Creating new annotation view");
    } else {
        NSLog(@"Recycling annotation view");
        browse_map_annot_view.annotation = annotation;
    }
...
一旦显示视图,我就会得到
2009-08-05 13:12:03.332 xxx[24308:20b] Request for annotation view
2009-08-05 13:12:03.333 xxx[24308:20b] Creating new annotation view
2009-08-05 13:12:03.333 xxx[24308:20b] Request for annotation view
2009-08-05 13:12:03.333 xxx[24308:20b] Creating new annotation view
对于我添加的每个注释(~60).地图(正确)仅显示当前矩形中的两个注释.我在viewDidLoad中设置区域:
if (center_point.latitude == 0) {
    center_point.latitude = 35.785098;
    center_point.longitude = -78.669899;
}
if (map_span.latitudeDelta == 0) {
    map_span.latitudeDelta = .001;
    map_span.longitudeDelta = .001;
}
map_region.center = center_point;
map_region.span = map_span;
NSLog(@"Setting initial map center and region");
[browse_map_view setRegion:map_region animated:NO];
在请求任何注释视图之前,将设置区域的日志条目打印到控制台.
这里的问题是,由于所有注释都是一次请求的,[mapView dequeueReusableAnnotationViewWithIdentifier]什么都不做,因为地图上的每个注释都有唯一的MKAnnotationViews.这导致了我的记忆问题.
一个可能的问题是这些注释聚集在一个非常小的空间(半径约1英里).虽然地图在viewDidLoad(纬度和经度增量.001)中放大得非常紧,但它仍然会一次加载所有注释视图.
谢谢...
yon*_*nel 14
您期望的是基于当前__CODE__地图显示的注释视图的某种"剪裁" .
这不是__CODE__选择器的工作方式.
从其文档中: 随着注释视图在屏幕外移动,地图视图将它们移动到内部管理的重用队列.随着新注释在屏幕上移动,并且提示您的代码提供相应的注释视图,您应始终尝试在创建新视图之前使其出列.
因此,当您调用如下序列时,可重用机制才有意义:__CODE__方法,以便在该区域发生变化时获得通知
当然,当用户缩小很多并且该区域的范围太大(要显示的引脚太多)时,您必须做出决定:我是否显示了所有注释视图(并承担风险)地图上的显示没有提供太多信息)或者我是否向用户设置了"放大以获取引脚"或其他内容的消息.但这是另一个故事...;)
| 归档时间: | 
 | 
| 查看次数: | 6268 次 | 
| 最近记录: |