文章目录
UIGestureRecognizer
RxCocoa + UIGestureRecognizer
let tapGesture = UITapGestureRecognizer()
view.addGestureRecognizer(tapGesture)
Tap
// 订阅方式实现
tapGesture.rx.event.subscribe(onNext: { _ in
print("tapped")
}).disposed(by: disposeBag)
// 绑定方式实现
tapGesture.rx.event.bind { _ in
print("tapped")
}.disposed(by: disposeBag)
Swipe
// 添加一个上滑的手势
let swipe = UISwipeGestureRecognizer()
swipe.direction = .up
self.view.addGestureRecognizer(swipe)
// 订阅方式实现
swipe.rx.event.subscribe(onNext: { [weak self] recognizer in
let point = recognizer.location(in: self?.view)
print("向上滑动 \(point.x) - \(point.y)")
}).disposed(by: disposeBag)
// 绑定方式实现
swipe.direction = .down
swipe.rx.event.bind { [weak self] recognizer in
let point = recognizer.location(in: self?.view)
print("向下滑动 \(point.x) - \(point.y)")
}.disposed(by: disposeBag
RxGesture + UIGestureRecognizer
tapView = UIView()
// ...
view.addSubview(tapView)
Tap
// tap
tapView.rx.tapGesture().when(.recognized)
.subscribe(onNext: { _ in
print("Tapped!!!")
}).disposed(by: disposeBag)
// double tap
tapView.rx.tapGesture(numberOfTapsRequired: 2).when(.recognized)
.subscribe(onNext: { _ in
print("double tapped!!!")
}).disposed(by: disposeBag)
Swipe
// swipe down
tapView.rx.swipeGesture(.down).when(.recognized)
.subscribe(onNext: { _ in
print("Swipe down")
}).disposed(by: disposeBag)
// swipe horizontal
tapView.rx.swipeGesture([.left, .right])
.subscribe(onNext: { _ in
print("Swipe horizontal")
}).disposed(by: disposeBag)
Long press
// long press
tapView.rx.longPressGesture().when(.began)
.subscribe(onNext: { _ in
print("long press")
}).disposed(by: disposeBag)
Pan
// pan gesture
let panGesture = tapView.rx.panGesture().share(replay: 1)
panGesture.when(.changed).asTranslation()
.subscribe(onNext: { [unowned self] translation, _ in
self.tapView.transform = CGAffineTransform(translationX: translation.x, y: translation.y)
}).disposed(by: disposeBag)
panGesture.when(.ended).subscribe(onNext: { _ in
print("pan gesture end")
}).disposed(by: disposeBag)
Rotation Gesture
// rotation gesture
let rotationGesture = tapView.rx.rotationGesture().share(replay: 1)
rotationGesture.when(.changed).asRotation()
.subscribe(onNext: { [unowned self] rotation, _ in
self.tapView.transform = CGAffineTransform(rotationAngle: rotation)
}).disposed(by: disposeBag)
rotationGesture.when(.ended)
.subscribe(onNext: { _ in
print("rotation gesture end")
}).disposed(by: disposeBag)
Pinch
// 缩放 pinch
let pinchGesture = tapView.rx.pinchGesture().share(replay: 1)
pinchGesture.when(.changed)
.asScale()
.subscribe(onNext: { [unowned self] scale, _ in
self.tapView.transform = CGAffineTransform(scaleX: scale, y: scale)
}).disposed(by: disposeBag)
pinchGesture.when(.ended)
.subscribe(onNext: { _ in
print("pinch end")
}).disposed(by: disposeBag)
Edge Pan
// 边缘平移 EdgePan
view.rx.screenEdgePanGesture(edges: .right)
.when(.recognized)
.subscribe(onNext: { _ in
print("rigjt edge")
}).disposed(by: disposeBag)
tapView.rx.anyGesture(.tap(), .swipe([.up, .right]))
.when(.recognized)
.subscribe(onNext: { _ in
print("tap or up down")
}).disposed(by: disposeBag)