ilink-world/ios/Pods/GoogleMaps/SwiftExample/GoogleMapsSwiftDemos/Swift/Samples/MyLocationViewController.swift

62 lines
2.0 KiB
Swift
Executable File

// Copyright 2020 Google LLC. All rights reserved.
//
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under
// the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, either express or implied. See the License for the specific language governing
// permissions and limitations under the License.
import GoogleMaps
import UIKit
class MyLocationViewController: UIViewController {
lazy var mapView: GMSMapView = {
let camera = GMSCameraPosition(latitude: -33.868, longitude: 151.2086, zoom: 1)
return GMSMapView(frame: .zero, camera: camera)
}()
var observation: NSKeyValueObservation?
var location: CLLocation? {
didSet {
guard oldValue == nil, let firstLocation = location else { return }
mapView.camera = GMSCameraPosition(target: firstLocation.coordinate, zoom: 14)
}
}
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
mapView.settings.compassButton = true
mapView.settings.myLocationButton = true
mapView.isMyLocationEnabled = true
view = mapView
// Listen to the myLocation property of GMSMapView.
observation = mapView.observe(\.myLocation, options: [.new]) {
[weak self] mapView, _ in
self?.location = mapView.myLocation
}
}
deinit {
observation?.invalidate()
}
}
extension MyLocationViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, didTapMyLocation location: CLLocationCoordinate2D) {
let alert = UIAlertController(
title: "Location Tapped",
message: "Current location: <\(location.latitude), \(location.longitude)>",
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
present(alert, animated: true)
}
}