Подтвердить что ты не робот

MKMapView игнорирует обновление centerOffset в iOS 4

Я ранее создал настраиваемый пузырь вызова в качестве подзадачи в MKAnnotationView, потому что встроенная выноска настолько ограничена. Это требует от меня изменения на centerOffset MKAnnotationView, когда он выбран для учета размера пузырька выноски. Все это отлично работало до выхода iOS 4. Теперь, с iOS 4, он полностью игнорирует мое обновление свойства centerOffset, и поэтому штырь и пузырь появляются, чтобы спрыгнуть вниз и вправо (верхний левый угол пузыря выноса теперь находится в том месте, где должна быть точка вывода).

Кто-нибудь знает, почему это изменилось в iOS 4? Есть ли что-то, что я могу сделать, чтобы заставить MKMapView распознать новый центр? Является ли это ошибкой, которую внесла яблоко?

Спасибо за помощь!

4b9b3361

Ответ 1

Убедитесь, что вы используете MKAnnotationView, а не MKPinAnnotationView! Вы не можете установить centerOffset для MKPinAnnotationView -объекта (за исключением, если вы, конечно, подкласс).

Ответ 2

У меня та же проблема - centerOffset, похоже, учитывается только в первый раз. Он изменяется внутри, но представление не перемещается - так что вам нужно сделать, это переместить представление самостоятельно.

Вы можете перемещать представление, отрегулировав его центр с необходимым смещением - выбранный вид остается выровненным в верхнем левом углу с невыделенным видом, поэтому вам нужно перестроить их центры. Вот мой случай:

Выбрано → Не выбрано:

self.center = CGPointMake(self.center.x + 56.0, self.center.y + 130.0);
self.centerOffset = CGPointMake(5.0, -14.0);

Не выбрано → Выбрано:

self.center = CGPointMake(self.center.x - 56.0, self.center.y - 130.0);
self.centerOffset = CGPointMake(64.0, -81.0);

Где 130 - разница в высоте между видами (центральная точка находится внизу), а 56 - разница между X смещениями их центров.

Помните - вам все равно нужно изменить смещение центра, потому что оно будет учитываться при масштабировании.

Надеюсь, это поможет, я потерял несколько часов на этом. Не забудьте отправить отчет об ошибке в Apple.

Ответ 3

Я думаю вместо centerOffset вы можете использовать setRegion, который отлично работает во всех версиях.

CGPoint point = [mapView convertCoordinate:selectedAnnotation.coordinate toPointToView:self.view];

CGRect frame = [customView frame];
frame.origin.y = point.y - frame.size.height;
frame.origin.x = point.x - frame.size.width / 2;

MKCoordinateRegion region = [mapView convertRect:frame toRegionFromView:self.view];
[mapView setRegion:region animated:YES];