2010-06-28 14 views
12

Poprzednio utworzyłem niestandardową bąbelię objaśnień jako podzbiór do MKAnnotationView, ponieważ wbudowane objaśnienie jest tak ograniczone. To wymaga, żebym zmienił się na centerOffset w MKAnnotationView, gdy zostanie wybrany do uwzględnienia rozmiaru bąbelka objaśnienia. Wszystko działało idealnie, zanim pojawił się iOS 4. Teraz, w systemie iOS 4, całkowicie ignoruje moją aktualizację właściwości centerOffset, a zatem pin i bańka wydają się przeskakiwać w dół i w prawo (lewy górny róg bąbelka objaśnienia znajduje się teraz w miejscu, w którym powinien znajdować się punkt końcowy) .Narzędzie MKMapView ignoruje aktualizację pliku centerOffset w systemie iOS 4

Czy ktoś wie, dlaczego to się zmieniło w iOS 4? Czy jest coś, co mogę zrobić, aby MKMapView rozpoznał nowy centerOffset? Czy to błąd wprowadzony przez Apple?

Dzięki za pomoc!

+0

Po prostu chciałem zagrać, napotkałem ten sam problem. W tej chwili dostosowałem centrum adnotacji, aby zrekompensować zmianę przesunięcia. To jednak dalekie od ideału. –

Odpowiedz

0

Myślę, że zamiast centerOffset można użyć setRegion, który działa dobrze we wszystkich wersjach.

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

Nie próbujemy dopasować regionu mapy, ale przesunięcie środka rzeczywistego widoku adnotacji. –

+0

@ Tak, ale tak, ustawienie regionu z tymi samymi wymiarami, ale nowa współrzędna środkowa ZRÓCI centrum na mapie. Powiedziałbym, że to jest odpowiedź, mając te same kłopoty, jakie miałeś. – makdad

+2

To nie jest to, co próbuję osiągnąć. Obecny obszar mapy musi pozostać taki sam. Chcę, aby widok adnotacji poruszał się zgodnie z nową właściwością centerOffset. –

4

Mam ten sam problem - centerOffset wydaje się być brane pod uwagę tylko pierwszy raz. Została ona wewnętrznie zmieniona, ale widok nie jest przenoszony - więc musisz sam przenieść widok.

Możesz przesunąć widok, dopasowując jego środek z wymaganym przesunięciem - wybrany widok pozostaje wyrównany w lewym górnym rogu z niezaznaczonym widokiem, więc musisz wyrównać ich centra. Oto mój przypadek:

Wybrane -> Niezaznaczony:

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

Niezaznaczony -> Wybrano:

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

gdzie 130 to różnica w wysokości pomiędzy poglądami (punkt środkowy jest na dole) , a 56 to różnica między przesunięciami X ich centrów.

Pamiętaj - nadal musisz zmienić przesunięcie środkowe, ponieważ będzie ono brane pod uwagę podczas powiększania.

Mam nadzieję, że to pomoże, straciłem kilka godzin na ten temat. Pamiętaj, aby przesłać zgłoszenie błędu do firmy Apple.

+0

Dzięki, pomogło mi to! – elsurudo

+0

pracował dla mnie, dzięki! –

6

Upewnij używasz MKAnnotationView a nie MKPinAnnotationView! Nie można ustawić obiektu centerOffset obiektu MKPinAnnotationView (z wyjątkiem podklasy oczywiście).

Powiązane problemy