2010-06-28 3 views
12

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

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

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

+0

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

ответ

0

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

Мы не пытаемся настроить область карты, но центральное смещение фактического аннотации. –

+0

@Yannick, да, но установив область с теми же размерами, но с новой координатой центра WILL повторно центрирует карту. Я бы сказал, что это ответ, так же, как и у вас. – makdad

+2

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

4

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

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

Выбранное -> Unselected:

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

Unselected -> Selected:

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

Спасибо, это помогло мне! – elsurudo

+0

работал для меня, спасибо! –

6

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

Смежные вопросы