Я использую код HGMovingAnnotation
и HGMovingAnnotationView
с кодом github для анимирования MKAnnotation
на MKmap
. Когда я запускаю пример проекта из проекта HG, все работает отлично.MKAnnotation не обновляет позицию
Я внедрил оригинальный проект HG, чтобы позволить мне вручную нажимать новую координату на HGMapPath
, а затем переместить аннотацию там, где я ее хочу.
Я поместил кнопку для тестирования, чтобы запустить ручной процесс, и все работает нормально. Аннотации перемещаются по экрану. Проблема заключается в том, что, когда я пытаюсь теперь вызывать этот ручной метод с данными из живого соединения socket.io, аннотация карты не будет перемещаться.
Кроме того, когда карта сначала загружает аннотацию, она не будет отображаться до тех пор, пока я не переместлю карту немного. То же самое для движущейся аннотации вручную, она не покажет движение из потока данных, пока я не увеличу карту. Но если я делаю кнопку кнопки, избегая потока io, аннотация перемещается без необходимости масштабирования или панорамирования карты?
размещающих Посмотреть аннотациями
if(doubleLat && doubleLng) {
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(doubleLat, doubleLng);
//Create path object
self.assignedAmbPath = [[HGMapPath alloc] initWithCoordinate:coordinate];
HGMovingAnnotation *movingObject = [[HGMovingAnnotation alloc] initWithMapPath:self.assignedAmbPath];
self.movingAssignedAmbObject = movingObject;
// add the annotation to the map
[self.mapView addAnnotation:movingObject];
// zoom the map around the moving object
MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);
MKCoordinateRegion region = MKCoordinateRegionMake(MKCoordinateForMapPoint(self.movingAssignedAmbObject.currentLocation), span);
[self.mapView setRegion:region animated:YES];
// start moving the object
[movingObject start];
}
код, который работает
- (IBAction)testMoveBtnPressed:(id)sender {
//TODO: move x and y
DLog(@"============== Test move button was pressed ================ ");
NSLog(@"");
int randn = (random() % 15)+15;
float pscale = (float)randn/10000;
double lat = 39.9813855 + pscale;
double lng = -75.1502155 + pscale;
for (id<MKAnnotation> annotation in self.mapView.annotations){
MKAnnotationView* anView = [self.mapView viewForAnnotation: annotation];
if (![annotation isKindOfClass:[PhoneAnnotation class]]){
// Process annotation view
[((HGMovingAnnotation *)annotation) trackToNewPosition:CLLocationCoordinate2DMake(lat, lng)];
}
}
}
код, который не работает
{
//TODO: move thing to new location
double doubleLat = [lat doubleValue];
double doubleLng = [lng doubleValue];
// NSLog(@"--------------- Jason it is ------------- Latitude being passed in is %f", doubleLat);
// NSLog(@"--------------- Jason it is ------------- Longitude being passed in is %f", doubleLng);
//
// [self.movingAssignedAmbObject trackToNewPosition:CLLocationCoordinate2DMake(doubleLat, doubleLng)];
for (id<MKAnnotation> annotation in self.mapView.annotations){
MKAnnotationView* anView = [self.mapView viewForAnnotation: annotation];
if (![annotation isKindOfClass:[PhoneAnnotation class]]){
// Process annotation view
[((HGMovingAnnotation *)annotation) trackToNewPosition:CLLocationCoordinate2DMake(doubleLat, doubleLng)];
}
}
}
Можете ли вы разместить свой код? Мы не сможем помочь вам в противном случае. – jszumski