菜鸟教程小白 发表于 2022-12-12 16:39:54

objective-c - 如何在不影响 MKMapView 性能的情况下放置 MKAnnotation


                                            <p><p>我的 map 上有 2800 多个位置。
但是当我把它们放在 map 上时, map 是卡住的。我只能等到所有注释数据都可用。</p>

<pre><code>    - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
      NSAutoreleasePool *pool_mr = [ init];

      NSLog(@&#34;mapView:regionDidChangeAnimated:&#34;);
      NSLog(@&#34;latitude: %f, longitude: %f&#34;, regionsMapView.centerCoordinate.latitude, regionsMapView.centerCoordinate.longitude);
      NSLog(@&#34;latitudeDelta: %f, longitudeDelta: %f&#34;, regionsMapView.region.span.latitudeDelta, regionsMapView.region.span.longitudeDelta);

      if (regionsMapView.region.span.latitudeDelta &lt; 0.007) {
            NSLog(@&#34;SHOW ANNOTATIONS&#34;);
            NSArray *annotations = ;
            AddressAnnotation *annotation = nil;
            for (int i=0; i&lt;; i++)
            {
                NSLog(@&#34;%i&#34;, i);
                annotation = (AddressAnnotation*);
                [ setHidden:NO];
            }
      }else {
            NSLog(@&#34;HIDE ANNOTATIONS&#34;);
            NSArray *annotations = ;
            AddressAnnotation *annotation = nil;
            for (int i=0; i&lt;; i++)
            {
                NSLog(@&#34;%i&#34;, i);
                annotation = (AddressAnnotation*);
                [ setHidden:YES];
            }

      }
    ;
}
</code></pre>

<p>另一种方法如下:</p>

<pre><code>- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id &lt;MKAnnotation, AddressAnnotation&gt;) annotation {   
    //NSAutoreleasePool *pool5 = [ init];
    // if it&#39;s the user location, just return nil.
    if (]){
      NSLog(@&#34;MKUserLocation&#34;);
      return nil;
    }
    else {
      NSLog(@&#34;mapView:viewForAnnotation&gt;&gt;&gt;&#34;);
      NSLog(@&#34;%@&#34;, );
      NSLog(@&#34;image: %@&#34;, ]);
      MKPinAnnotationView *annView=[[ initWithAnnotation:annotation reuseIdentifier:] autorelease];
      //annView.pinColor = MKPinAnnotationColorPurple;
      UIImage *annotationImage = []] autorelease];

      annView.image = annotationImage;
      annView.animatesDrop = NO;
      annView.canShowCallout = YES;
      //annView.draggable = NO;
      //annView.highlighted = NO;

      annView.calloutOffset = CGPointMake(-5, 5);
      return annView;
    }

    //;
    NSLog(@&#34;&lt;&lt;&lt;mapView:viewForAnnotation&#34;);

    return nil;

}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>有了这么多注释,我会将它们聚集在一起,以便在放大时获得更多细节。我用这种方式在 map 上放了几千 block ,效果很好。如果你搜索它,有很多关于 map 针聚类的信息。</p>

<p>这里有一个 <a href="http://getsuperpin.com/" rel="noreferrer noopener nofollow">commercial option</a>例如(没有连接,没有使用过),但是如果你环顾四周,你会看到很多关于如何自己实现它的信息。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 如何在不影响 MKMapView 性能的情况下放置 MKAnnotation,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/6570729/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/6570729/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 如何在不影响 MKMapView 性能的情况下放置 MKAnnotation