Saya memiliki peta yang menunjukkan dengan benar, satu-satunya hal yang ingin saya lakukan sekarang adalah menyetel tingkat zoom saat dimuat. Apakah ada cara untuk melakukan ini?
Terima kasih
Saya menemukan solusi untuk diri saya sendiri, yang sangat sederhana dan berhasil. Gunakan MKCoordinateRegionMakeWithDistance
untuk mengatur jarak dalam meter secara vertikal dan horizontal untuk mendapatkan zoom yang diinginkan. Dan tentu saja ketika Anda memperbarui lokasi Anda, Anda akan mendapatkan koordinat yang tepat, atau Anda dapat menentukannya langsung di CLLocationCoordinate2D
saat startup, jika itu yang perlu Anda lakukan:
CLLocationCoordinate2D noLocation;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(noLocation, 500, 500);
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
[self.mapView setRegion:adjustedRegion animated:YES];
self.mapView.showsUserLocation = YES;
Cepat:
let location = ...
let region = MKCoordinateRegion( center: location.coordinate, latitudinalMeters: CLLocationDistance(exactly: 5000)!, longitudinalMeters: CLLocationDistance(exactly: 5000)!)
mapView.setRegion(mapView.regionThatFits(region), animated: true)
MKCoordinateRegionMakeWithDistance
masih ada di Swift. Solusi ini berhasil!Berdasarkan fakta bahwa garis bujur diberi jarak yang sama pada titik mana pun di peta, terdapat implementasi yang sangat sederhana untuk menyetel centerCoordinate dan zoomLevel:
sumber
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(NSUInteger)zoomLevel animated:(BOOL)animated { MKCoordinateSpan span = MKCoordinateSpanMake(0, 360/pow(2, zoomLevel)*self.frame.size.width/256); [self setRegion:MKCoordinateRegionMake(centerCoordinate, span) animated:animated]; }
double z = log2(360 * ((self.mapView.frame.size.width/256) / self.mapView.region.span.longitudeDelta));
Itu tidak ada di dalamnya, tetapi saya telah melihat / menggunakan kode ini . Ini memungkinkan Anda untuk menggunakan ini:
Catatan: Ini bukan kode saya, saya tidak menulisnya, jadi karena itu tidak dapat mengambil kredit untuk itu
sumber
Anda juga dapat memperbesar dengan menggunakan MKCoordinateRegion dan mengatur rentang lintang & bujur delta. Di bawah ini adalah referensi cepat dan di sini adalah referensi iOS. Itu tidak akan melakukan sesuatu yang mewah tetapi harus memungkinkan Anda untuk mengatur zoom saat menggambar peta.
Edit 1:
sumber
Implementasi Swift sederhana, jika Anda menggunakan outlet.
Berdasarkan jawaban @ Carnal.
sumber
Implementasi yang cepat
sumber
IBOutlet
Anda sendirimap
, Anda mendefinisikannya sebagaiMapViewWithZoom
bukan yang sederhanaMKMapView
. Kemudian, Anda dapat mengatur level zoom denganmap.zoomLevel = 1
ataumap.zoomLevel = 0.5
mapView.zoomLevel -= 2
Untuk Swift 3 ini cukup cepat:
Cukup tentukan Lat-, long-Meter
<CLLocationDistance>
dan mapView akan menyesuaikan tingkat zoom dengan nilai Anda.sumber
Berdasarkan jawaban hebat @ AdilSoomro . Saya telah menemukan ini:
sumber
Saya harap potongan kode berikut akan membantu Anda.
Anda dapat memilih nilai apa pun sebagai ganti 0,5 untuk mengurangi atau meningkatkan level zoom. Saya telah menggunakan metode ini dengan mengklik dua tombol.
sumber
Jawaban Swift 2.0 yang memanfaatkan NSUserDefaults untuk menyimpan dan memulihkan zoom dan posisi peta.
Fungsi untuk menyimpan posisi peta dan zoom:
Jalankan fungsinya setiap kali peta dipindahkan:
Fungsi untuk menyimpan zoom dan posisi peta:
Tambahkan ini ke viewDidLoad:
sumber
Saya tahu ini adalah jawaban yang terlambat, tetapi saya hanya ingin mengatasi masalah pengaturan tingkat zoom sendiri. Jawaban goldmine bagus tetapi saya merasa tidak berfungsi dengan baik dalam aplikasi saya.
Pada pemeriksaan lebih dekat, tambang emas menyatakan bahwa "garis bujur memiliki jarak yang sama di setiap titik peta". Ini tidak benar, sebenarnya garis lintang yang diberi jarak yang sama dari -90 (kutub selatan) hingga +90 (kutub utara). Garis bujur diberi jarak terlebar di ekuator, menyatu ke satu titik di kutub.
Oleh karena itu, implementasi yang saya adopsi adalah dengan menggunakan perhitungan garis lintang sebagai berikut:
Semoga membantu pada tahap akhir ini.
sumber
Cepat:
locValue adalah koordinat Anda.
sumber
Di sini, saya meletakkan jawaban saya dan bekerja untuk 4.2 cepat .
Pusat MKMapView dan perbesar
sumber
Berdasarkan jawaban quentinadam
Swift 5.1.0
sumber
MKMapView
ekstensi berdasarkan jawaban ini (+ akurasi tingkat zoom floating-point):sumber