gpt4 book ai didi

ios - 每次创建新注释 - dequeueReusableAnnotationViewWithIdentifier

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:12:48 25 4
gpt4 key购买 nike

这是我的代码:

- (MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation class] == MKUserLocation.class) {
return nil;
}
static NSString *identifier=@"an";

MKAnnotationView *pinView = nil;

pinView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];

if (pinView == nil)
{
pinView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
pinView.canShowCallout = YES;
NSLog(@"NEW ONE CREATED");
}
else
{
pinView.annotation = annotation;
}

return pinView;
}

这似乎不起作用,pinView 始终为 nil,因为我可以看到创建的每个 pin 的 nslog。

最佳答案

两个想法:

  1. 不要假设仅仅因为注释已经滚出当前 map View 的当前 region,它就可以自动出列并立即重新用于另一个注释。 MKMapView 很可能会卡在注释 View 上,而不是让它们立即可供重用。例如,我可以想象一些内部优化可能会卡在 map 当前 region 附近的注释 View 上,以防用户滚动他们的 map ,使得以前的注释 View 现在再次可见。 MKMapView 可能希望避免在用户来回滚动 MKMapView 时创建和重新创建相同的注释 View 。

    根据我的经验,您必须滚动一段距离才能使旧注释 View 可供重用。

  2. 这极不可能,但除了我上面的观察之外,我们应该注意到您的 viewForAnnotation 引用了一些外部变量,mapView,而不是使用aMapView 作为参数传递给方法。这很可能是指向同一个 MKMapView 的一些实例变量,一切都很好,但是如果那个 mapView 变量是 nildequeueReusableAnnotationViewWithIdentifier 也将始终返回 nil。您可能想要更改 viewForAnnotation 以使用 aMapView 参数来消除这种歧义。

关于ios - 每次创建新注释 - dequeueReusableAnnotationViewWithIdentifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com