Skip to content

Instantly share code, notes, and snippets.

@pofat
Last active December 11, 2018 14:47
Show Gist options
  • Save pofat/e44b8e26eaddfb15e71a96516036e87d to your computer and use it in GitHub Desktop.
Save pofat/e44b8e26eaddfb15e71a96516036e87d to your computer and use it in GitHub Desktop.
Use RAC to detect first drag after the map is loaded
import ReactiveSwift
import Result
class MapViewController: UIViewController {
private let (didLoadSingal, didLoadObserver) = Signal<Bool, NoError>.pipe()
private let (didDragSignal, didDragObserver) = Signal<Bool, NoError>.pipe()
override func viewDidLoad() {
super.viewDidLoad()
let (signal, observer) = Signal<Signal<Bool, NoError>, NoError>.pipe()
signal.flatten(.concat).take(first: 1).observeCompleted { [unowned self] in self.mapDidDrag() }
observer.send(value: loadedSingal)
observer.send(value: didDragSignal)
observer.sendCompleted()
}
}
extension MapViewController: MKMapViewDelegate {
func mapViewDidChangeVisibleRegion(_ mapView: MKMapView) {
didDragObserver.sendCompleted()
}
func mapViewDidFinishLoadingMap(_ mapView: MKMapView) {
loadedObserver.sendCompleted()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment