如何使用 Swift 启用 Google 地图缩放控件
How to enable Google Maps zoom controls using Swift
我正在阅读 Google maps for swift 的文档,但与 Android 相比,我没有找到在我的地图上设置 'Zoom Controls' 的方法,默认情况下是禁用的。
是否存在使用 Google Maps iOS SDK
显示控件的方法?
我认为@Scriptable 是正确的,文档中没有 Zoom Controls
部分 iOS SDK
。
好吧,我制作了自己的(非常基本的)控件。
保持这个顺序(MapView
、Button
、Button
),否则你看不到按钮。
第一个,您必须 select 您的 UIVIew
并将 class 更改为 GSMMapView
并且,在 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)
}
}
你应该抓住当前的缩放值,因为如果你硬编码缩放值,当用户在通过手势缩小后按下按钮时,用户将不仅使用按钮而且使用按钮和手势,你将缩放到旧的缩放值(非常靠近地图)
要解决这个问题,您应该在此处捕捉缩放值(在 GMSMapViewDelegate 中)
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
zoom = mapView.camera.zoom
}
所有代码将如下所示
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
}
}
我正在阅读 Google maps for swift 的文档,但与 Android 相比,我没有找到在我的地图上设置 'Zoom Controls' 的方法,默认情况下是禁用的。
是否存在使用 Google Maps iOS SDK
显示控件的方法?
我认为@Scriptable 是正确的,文档中没有 Zoom Controls
部分 iOS SDK
。
好吧,我制作了自己的(非常基本的)控件。
保持这个顺序(MapView
、Button
、Button
),否则你看不到按钮。
第一个,您必须 select 您的 UIVIew
并将 class 更改为 GSMMapView
并且,在 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)
}
}
你应该抓住当前的缩放值,因为如果你硬编码缩放值,当用户在通过手势缩小后按下按钮时,用户将不仅使用按钮而且使用按钮和手势,你将缩放到旧的缩放值(非常靠近地图)
要解决这个问题,您应该在此处捕捉缩放值(在 GMSMapViewDelegate 中)
func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
zoom = mapView.camera.zoom
}
所有代码将如下所示
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
}
}