I was reading the documentation of Google maps for swift , but compared with Android, I didn't find a way to set the 'Zoom Controls' on my map and by default are disabled.
Exist a way with the Google Maps iOS SDK
to display the controls?
I think @Scriptable is right, the documentation hasn't a section for Zoom Controls
for iOS SDK
.
Well, I made my own (and very basic) controls.
Keep this order (MapView
, Button
, Button
), else, you can't see the buttons.
First one, you must select your UIVIew
and change the class to GSMMapView
and, in the MapViewController
import Foundation
import UIKit
import GoogleMaps
class MapViewController: UIViewController {
struct Place {
let id: Int
let name: String
let lat: CLLocationDegrees
let lng: CLLocationDegrees
let icon: String
}
@IBOutlet weak var mapView: GMSMapView!
var markerDict: [Int: GMSMarker] = [:]
var zoom: Float = 15
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.camera(withLatitude: 34.1381168, longitude: -118.3555723, zoom: zoom)
self.mapView.camera = camera
do {
if let styleURL = Bundle.main.url(forResource: "style", withExtension: "json") {
mapView.mapStyle = try GMSMapStyle(contentsOfFileURL: styleURL)
} else {
NSLog("Unable to find style.json")
}
} catch {
NSLog("One or more of the map styles failed to load. \(error)")
}
let places = [
Place(id: 0, name: "MrMins", lat: 34.1331168, lng: -118.3550723, icon: "i01"),
]
for place in places {
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: place.lat, longitude: place.lng)
marker.title = place.name
marker.snippet = "Custom snipet message \(place.name)"
marker.appearAnimation = kGMSMarkerAnimationPop
//marker.icon = self.imageWithImage(image: UIImage(named: place.icon)!, scaledToSize: CGSize(width: 35.0, height: 35.0))
marker.map = self.mapView
markerDict[place.id] = marker
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func btnZoomIn(_ sender: Any) {
zoom = zoom + 1
self.mapView.animate(toZoom: zoom)
}
@IBAction func btnZoomOut(_ sender: Any) {
zoom = zoom - 1
self.mapView.animate(toZoom: zoom)
}
}
You should catch current value of zoom, because If you hardcode zoom value and user will use not only buttons but buttons and gestures when user will pressed on button after zoom out by gestures you will zoom to old zoom value (very close to map)
to fix this moment you should catch zoom value here (in GMSMapViewDelegate)
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
zoom = mapView.camera.zoom
}
all code will be looks like this
class A: UIViewController {
var zoom: Float = 15
@IBAction func ZoomInButtonPressed(_ sender: UIButton) {
let nextZoom = zoom + 1
mapView.animate(toZoom: nextZoom)
}
}
extension A: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
zoom = mapView.camera.zoom
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With