gpt4 book ai didi

ios - MKAnnotation 不会出现在使用 NSThread 的 map 中

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

我有一个在 map 中插入注释的方法。此方法由 map 的委托(delegate)方法调用。

问题是注释没有出现在 map 中。我必须再触摸一次 map 才能显示注释。

插入注释后,我正在使用 [CATRansaction flush],但它不起作用。

代码上方:

映射委托(delegate)方法:

- (void) mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{    log(@"region changed");    if (_userRegion.center.latitude) {        log(@"Move map. New location: %f X %f", self.mapView.centerCoordinate.latitude, self.mapView.centerCoordinate.longitude);        NSDictionary *coordinates = @{                                      @"latitude": [NSString stringWithFormat:@"%f", self.mapView.centerCoordinate.latitude],                                      @"longitude": [NSString stringWithFormat:@"%f", self.mapView.centerCoordinate.longitude]                                      };        NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(updateMap:) object:coordinates];        [thread start];    }    if(_userMenuOpened){        [self closeUserMenu];    }    if(_settingsMenuOpened){        [self closeSettingsMenu];    }}

插入注解的方法:

- (void) updateMap:(NSDictionary *) coordinates {    NSArray *annotationsInMap = [self.mapView annotations];    _busStops = [_ws getStations:10 lat:[[coordinates valueForKey:@"latitude"] doubleValue] lng:[[coordinates valueForKey:@"longitude"] doubleValue]];    for(NSString *stop in _busStops) {        BOOL inMap = NO;        BPBusStopAnnotation *annotation = [[BPBusStopAnnotation alloc] initWithData:stop];        //Se tiver annotation no mapa verifica se os que vem no WS sao os mesmos        if(annotationsInMap.count > 0){            for(BPBusStopAnnotation *pt in annotationsInMap){                if(pt && ![pt isKindOfClass:[MKUserLocation class]]){                    if([annotation.codigo isEqual:pt.codigo]){                        inMap = YES;                        break;                    }                }            }        }        if (!inMap) {            [self.mapView addAnnotation:annotation];        }    }    [CATransaction flush];}

谢谢!!!

最佳答案

在“updateMap”方法中,我改变了

if (!inMap) {
[self.mapView addAnnotation:annotation];
}

对于

[self.mapView performSelectorOnMainThread: @selector(addAnnotation:) withObject: annotation waitUntilDone: YES];

关于ios - MKAnnotation 不会出现在使用 NSThread 的 map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051080/

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