지도에 특수 효과를 삽입하는 메소드가 있습니다. 이 메소드는 map의 delegate 메소드에 의해 호출됩니다.MKAnnotation이 NSThread를 사용하여지도에 나타나지 않습니다.
문제는 주석이지도에 나타나지 않는다는 것입니다. 특수 효과를 표시하려면지도를 한 번 더 터치해야합니다.
주석을 삽입 한 후 [CATRansaction flush]를 사용하고 있지만 작동하지 않습니다. 코드 위
:
지도 위임 방법 : 주석을 삽입
- (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]; }
감사의!
관련 : http://stackoverflow.com/questions/1995245/iphone-mapview-interrupted 답안 @m에 대한 – Anna