60 lines
2.0 KiB
Swift
Executable File
60 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 CameraViewController: UIViewController {
|
|
|
|
private let interval: TimeInterval = 1 / 30
|
|
|
|
private lazy var mapView: GMSMapView = {
|
|
let camera = GMSCameraPosition(target: .victoria, zoom: 20, bearing: 0, viewingAngle: 0)
|
|
return GMSMapView(frame: .zero, camera: camera)
|
|
}()
|
|
|
|
private var timer: Timer?
|
|
|
|
override func loadView() {
|
|
mapView.settings.zoomGestures = false
|
|
mapView.settings.scrollGestures = false
|
|
mapView.settings.rotateGestures = false
|
|
mapView.settings.tiltGestures = false
|
|
view = mapView
|
|
}
|
|
|
|
override func viewDidAppear(_ animated: Bool) {
|
|
super.viewDidAppear(animated)
|
|
|
|
// Every 0.033 seconds, adjust the position of the camera.
|
|
timer = Timer.scheduledTimer(
|
|
timeInterval: interval, target: self, selector: #selector(moveCamera), userInfo: nil,
|
|
repeats: true)
|
|
}
|
|
|
|
override func viewDidDisappear(_ animated: Bool) {
|
|
super.viewDidDisappear(animated)
|
|
timer?.invalidate()
|
|
}
|
|
|
|
// Updates zoom and viewing angle, the map zoom out and the map appears in perspective, with
|
|
// far-away features appearing smaller, and nearby features appearing larger.
|
|
@objc func moveCamera() {
|
|
let zoom = max(mapView.camera.zoom - 0.1, 17.5)
|
|
let newPosition = GMSCameraPosition(
|
|
target: mapView.camera.target, zoom: zoom, bearing: mapView.camera.bearing,
|
|
viewingAngle: mapView.camera.viewingAngle + 10)
|
|
mapView.animate(to: newPosition)
|
|
}
|
|
}
|