Я внедрил метод - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
для изменения местоположения пользователя. Внутри этого метода я использовал:viewForAnnotation не перемещает userLocation
if (annotation==(mapView.userLocation)) {
MKAnnotationView *myAnotation = [[MKAnnotationView alloc] init];
myAnotation.image = self.userPointImage.image;
myAnotation.centerOffset = CGPointMake(0, 250);
return myAnotation;
}
else
{
return nil;
}
Что успешно перемещает аннотацию userLocation по умолчанию на центральное дно. Но поскольку я также использую заголовок, поэтому, перемещая мой телефон, он все еще поворачивает карту из центра.
- (void)locationManager:(CLLocationManager *) manager didUpdateHeading:(CLHeading *) newHeading {
[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:true];
}
Но аннотация пользователя для пользователей приведена ниже. Итак, как это сделать?
UPDATE
Я нашел this вопрос и попытался применить его. Но поскольку я использую заголовок, так что это приводит к сбою приложения. В моем didUpdateUserLocation
методе, который я добавил [self moveCenterByOffset:CGPointMake(0, 200) from:userLocation.coordinate];
и этот метод заключается в следующем:
- (CLLocationCoordinate2D)moveCenterByOffset:(CGPoint)offset from:(CLLocationCoordinate2D)coordinate
{
CGPoint point = [self.mapView convertCoordinate:coordinate toPointToView:self.mapView];
point.x += offset.x;
point.y += offset.y;
CLLocationCoordinate2D center = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
return center;
}
, а затем в моем didUpdateUserLocation
методы я обновил его как: MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([self moveCenterByOffset:CGPointMake(0, -250) from:userLocation.coordinate], 800.0f, 200.0f);
и [mapView setRegion:region animated:NO];
, как я использую заголовок так анимация установлена в NO
. Но теперь, когда я запускаю код, он начинает дергаться между центром и новой точкой.
Попробуйте '[self.mapView setUserTrackingMode: MKUserTrackingModeNone]; 'чтобы избежать проблемы с рывком –
@ReinierMelian, но я хочу использовать заголовок, это требование. Когда пользователь перемещается, карта перемещается и следует его направлению. –
Сообщите мне, если я ошибаюсь, вам нужно отслеживать движения пользователя, но изменить свое положение на поддельную позицию? это то, что вам нужно достичь? –