Skip to content

Instantly share code, notes, and snippets.

@jverkoey
Last active December 2, 2016 08:14
Show Gist options
  • Select an option

  • Save jverkoey/2dd15ca1c442cb95ca6e812ba2d04e4f to your computer and use it in GitHub Desktop.

Select an option

Save jverkoey/2dd15ca1c442cb95ca6e812ba2d04e4f to your computer and use it in GitHub Desktop.
public typealias MaterialRestableStream<T> = (stream: MaterialStream<T>, atRest: MaterialStream<Bool>)
public func drag(_ pan: UIPanGestureRecognizer) -> MaterialRestableStream<CGPoint> {
return (MaterialStream<CGPoint>(named: #function) { observer in
let dragObserver = DragObserver {
observer.next(pan.location(in: pan.view!.superview!))
}
pan.addTarget(dragObserver, action: #selector(DragObserver.didPan))
return Subscription {
pan.removeTarget(dragObserver, action: #selector(DragObserver.didPan))
}
}, MaterialStream<Bool>(named: "\(#function).activity") { observer in
observer.next(!(pan.state == .began || pan.state == .changed))
let dragObserver = DragObserver {
observer.next(!(pan.state == .began || pan.state == .changed))
}
pan.addTarget(dragObserver, action: #selector(DragObserver.didPan))
return Subscription {
pan.removeTarget(dragObserver, action: #selector(DragObserver.didPan))
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment