/ / MKMapView ignoruje aktualizację centerOffset w iOS 4 - iphone, mkmapview, ios4, mkannotationview

MKMapView ignoruje aktualizację centerOffset w iOS 4 - iphone, mkmapview, ios4, mkannotationview

Wcześniej utworzyłem niestandardowy dymek objaśnienia jakosubview 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 bańki wywoławczej znajduje się teraz w miejscu, w którym powinien znajdować się punkt końcowy) .

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!

Odpowiedzi:

6 dla odpowiedzi № 1

Upewnij się, że używasz MKAnnotationView i nie MKPinAnnotationView! Nie można ustawić opcji centerOffset dla a MKPinAnnotationView-object (z wyjątkiem podklasy oczywiście).


4 dla odpowiedzi nr 2

Mam ten sam problem - centerOffset wydaje się być brane pod uwagę tylko za pierwszym razem. Jest zmieniany wewnętrznie, ale widok nie jest przenoszony - więc musisz sam przenieść widok.

Możesz przenieść widok, dostosowując jego środekz 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 -> Niezaznaczone:

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

Niezaznaczone -> Wybrane:

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

Gdzie 130 jest różnicą wysokości między widokami (punkt środkowy znajduje się na dole), a 56 jest różnicą 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 to. Pamiętaj, aby przesłać raport o błędzie do Apple.


0 dla odpowiedzi № 3

Myślę, że zamiast centerOffset możesz 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];