RxMapKit 1.1.0

RxMapKit 1.1.0

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Feb 2017
SwiftSwift Version 3.0
SPMSupports SPM

Maintained by Yongha Yoo.


Downloads

Total22,970
Week0
Month5,978

Installs

Apps2,125
Test Targets2,030
powered by Segment

GitHub

Stars5
Watchers2
Forks0
Issues0
Contributors1
Pull Requests0

Code

Files2
LOCLines of Code 318


 
Depends on:
RxSwift~> 3.2
RxCocoa~> 3.2
 

RxMapKit 1.1.0

  • By
  • Yongha Yoo

RxMapKit

RxMapKit is a RxSwift wrapper for MapKit

Example Usages

Setup MKMapView

// Setup MKMapview from Interface Builder
@IBOutlet weak var mapView: MKMapView!

or

// Setup MKMapview
let mapView = MKMapView(frame: self.view.bounds)
self.view.addSubview(mapView)

Observing properties

// Camera position

mapView.rx.regionDidChange.asDriver()
    .drive(onNext: { print("Did region change: \($0.region) isAnimated \($0.isAnimated)") })
    .addDisposableTo(disposeBag)

// Marker tapped

mapView.rx.didTapMarker.asDriver()
    .drive(onNext: { print("Did tap marker: \($0)") })
    .addDisposableTo(disposeBag)

// Update marker icon 

mapView.rx.didSelectAnnotationView.asDriver()
    .drive(onNext: { $0.image = #imageLiteral(resourceName: "marker_selected") })
    .addDisposableTo(disposeBag)

mapView.rx.didDeselectAnnotationView.asDriver()
    .drive(onNext: { $0.image = #imageLiteral(resourceName: "marker_normal") })
    .addDisposableTo(disposeBag)

Binding properties

// Camera animations

button.rx.tap
    .map { MKMapCamera(lookingAtCenter: center, fromDistance: 50000, pitch: 30, heading: 45) }
    .bindTo(mapView.rx.cameraToAnimate)
    .addDisposableTo(disposeBag)

button.rx.tap
    .map { CLLocationCoordinate2D(latitude: 33.3659424, longitude: 126.3476852) }
    .bindTo(mapView.rx.centerToAnimate)
    .addDisposableTo(disposeBag)

button.rx.tap
    .map { [annotation0, annotaion1] }
    .bindTo(mapView.rx.annotationsToShowToAnimate)
    .addDisposableTo(disposeBag)

// Properties

button.rx.tap
    .map { .satellite }
    .bindTo(mapView.rx.mapType)
    .addDisposableTo(disposeBag)

button.rx.tap
    .map { false }
    .bindTo(mapView.rx.showsTraffic)
    .addDisposableTo(disposeBag)

Delegates which have a return value

//  func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?

mapView.rx.handleViewForAnnotation { (mapView, annotation) in
    if let _ = annotation as? MKUserLocation {
        return nil
    } else {
        let view = mapView.dequeueReusableAnnotationView(withIdentifier: "reusableIdentifier") ??
            MKAnnotationView(annotation: annotation, reuseIdentifier: "reusableIdentifier")
        view.image = #imageLiteral(resourceName: "marker_normal")
        view.canShowCallout = true
        return view
    }
}

// func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer

mapView.rx.handleRendererForOverlay { (mapView, overlay) in
    if overlay is MKCircle {
        let renderer = MKCircleRenderer(overlay: overlay)
        renderer.strokeColor = UIColor.green.withAlphaComponent(0.8)
        renderer.lineWidth = 4
        renderer.fillColor = UIColor.green.withAlphaComponent(0.3)
        return renderer
    } else {
        return MKOverlayRenderer(overlay: overlay)
    }
}

Requirements

Author

Yongha Yoo

License

MIT