/
PanZoomPinchBehavior.swift
32 lines (28 loc) · 1.14 KB
/
PanZoomPinchBehavior.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import CoreGraphics
internal final class PanZoomPinchBehavior: PinchBehavior {
private let initialCameraState: CameraState
private var currentPinchMidpoint: CGPoint
private let mapboxMap: MapboxMapProtocol
internal init(initialCameraState: CameraState,
initialPinchMidpoint: CGPoint,
mapboxMap: MapboxMapProtocol) {
self.initialCameraState = initialCameraState
self.currentPinchMidpoint = initialPinchMidpoint
self.mapboxMap = mapboxMap
}
internal func update(pinchMidpoint: CGPoint, pinchScale: CGFloat) {
mapboxMap.performWithoutNotifying {
mapboxMap.dragStart(for: currentPinchMidpoint)
let dragOptions = mapboxMap.dragCameraOptions(
from: currentPinchMidpoint,
to: pinchMidpoint)
mapboxMap.setCamera(to: dragOptions)
mapboxMap.dragEnd()
}
let zoomIncrement = log2(pinchScale)
mapboxMap.setCamera(to: CameraOptions(
anchor: pinchMidpoint,
zoom: initialCameraState.zoom + zoomIncrement))
currentPinchMidpoint = pinchMidpoint
}
}