I want to display google maps on a view that's then added to self.view
, rather than drawing the map directly on self.view
. Therefore, I created a view in storyboard and changed its class to GMSMapView
. I also created an outlet connection to that view called gmView
.
I am using the following code that does unfortunately not show the map:
let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: GMSCameraPosition.camera(withLatitude: 51.050657, longitude: 10.649514, zoom: 5.5))
gmView = mapView
Also, I tried adding the mapView
to self.view
as a subview, like this:
self.view.addSubview(mapView)
...and inserting it:
self.view.insertSubview(mapView, at: 0)
Note that I'm using Auto Layout if that changes anything.
None of these approaches seem to work for me.
Any ideas?
I finally figured out how to display the map in a UIView created in Storyboard and center it in a specific location.
Note: After created the UIView outlet, I changed its class to GMSMapView as explained before.
And this is the output: Map centred in Berlin
We can use zPosition in iOS.
If we have a view named salonDetailView, eg:
in my case see the image
and have UIView for GMSMapView, eg:
To show salonDetailView upper of the mapViewUI use zPosition as below:
If you want to add a
mapView
after the loading of theview
, then you need to create an object ofGMSMapView
. So break the outlets of yourmapView
since it will be created dynamically.Here is the output.
mapView
is of width = 200 and height = 200 with center as same asself.view
Here's a very simple way to get a Google Maps hooked up to a
View
in yourViewController
in a storyboard (Swift 4.2, Xcode 10).I'm calling my
ViewController
MapLocationsViewController
.So, in your storyboard, make sure the class on your
ViewController
is properly referencing your correct class (MapLocationsViewController
for me in this example).Next, drag a
View
object onto that ViewController and set that class toGMSMapView
.Hook that
View
object up to an @IBOutlet in your code (which I namedviewForGoogleMap
in my example).Here's a minimalistic example code:
For further info, check out the Google Maps docs.
CGRect.zero will return a view with zero height and zero width. It will be invisible.
Also, it doesn't really make sense to add it in to the storyboard if you want to do your own allocation. You should instead just create a property of the view controller programmatically, and set its frame to be whatever you want.
Note, when you call 'addSubview' to a view, it will always be added to the top of the view, so there's no need to insert it at a given index. Using auto-layout is good, but viewDidLoad() gets called before all of the constraints are set. If you want to be able to set your mapView's frame = self.view, you would want to do that in viewDidAppear() instead.
Very Simple. Use Following Steps
1) Open Storyboard: Drop a UIView from Object library in your ViewController.
2) Make custom view outlet in your class. (viewForGMap in my code)
3) Add following line for code in your class.
OutPut: