Jeśli jesteś gotowy do przybliżenia obliczeń, możesz to zrobić za pomocą sprytnego skalowania.
Twój obszar docelowy ma 80 wysokości poza mapView, który wynosi 380. Dlatego chcesz mieć region, który jest 4.75 razy wyższy niż obszar obliczony w celu dopasowania do adnotacji. (0,25 dodatkowe powyżej i 3,5 dodatkowe poniżej).
Najpierw musisz zdobyć region (lub maprect, w dowolnym miejscu, w którym wolisz pracować) i uczynić go takim samym jak Twój docelowy obszar wyświetlania. Jest tak dlatego, że naprawdę szeroki i krótki region nie dotykałby górnej i dolnej części widocznego obszaru, a zatem pomnożenie jego wysokości nie powodowałoby czegoś, co dotknęłoby górnej i dolnej części widoku mapy. Więc jeśli viewable_height/viewable_width > annotations_height/annotations_width
powinieneś ustawić annotations_height
na annotations_width * (viewable_height/viewable_width)
.
Dzięki temu możesz dodać 25% na północ od pola adnotacji, a 350% na południe. Możesz to zrobić, przesuwając centrum o 212,5% (aktualnej wysokości) na południe i zwiększając pionowy zakres o 475%.
Wszystko to jest przybliżeniem, ponieważ świat jest kulą i nie patrzymy na rzut płaski (tj. 1 stopień szerokości geograficznej w pobliżu równika jest narysowany mniej niż 1 stopień w pobliżu biegunów). Ale jeśli chcesz być dokładnym, możesz spojrzeć na skalowanie liczb według szerokości geograficznej i takich. Jeśli masz do czynienia tylko z adnotacjami w skali wielkości miasta, prawdopodobnie wszystko będzie dobrze.
Nadzieję, że pomaga.
Ten kod pasuje do wszystkich adnotacji w granicach mapView, ale potrzebuję pasować do wszystkich adnotacji w danym CGRect w granicach mapView. – user2393462435
@ user2393462435 Nie jest dokładnie to, co dokładnie próbujesz powiedzieć ... Przeczytaj to sam i jasno powiedz, o co prosisz. –
@ R.A rozmiar mapView wynosi 320 x 380. Ustaw region widoku mapy tak, aby wszystkie adnotacje znajdowały się w obszarze rect (0.0, 20.0, 320.0, 100.0).to jest to! – user2393462435