MKMapView игнорирует обновление centerOffset в iOS 4 - PullRequest
12 голосов
/ 29 июня 2010

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

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

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

Ответы [ 3 ]

6 голосов
/ 22 января 2014

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

4 голосов
/ 29 марта 2011

У меня та же проблема - кажется, что 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.

0 голосов
/ 28 февраля 2011

Я думаю, что вместо 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];
...