RxSwift学习之旅 - RxGesture

简介
RxGesture是RxSwift社区的产物,是对view手势的封装。

项目地址:[url=https://github.com/RxSwiftCommunity/RxGesture]RxGesture[/url]

话不多说,直接来看它的用法吧。

[b]点击[/b]

tapView.rx
.tapGesture()
.when(.recognized)
.subscribe(
onNext:{
_ in
print("tapped!!!")
}
)
.disposed(by: disposeBag)


[b]双击[/b]

tapView.rx
.tapGesture(numberOfTapsRequired: 2)
.when(.recognized)
.subscribe(
onNext:{
_ in
print("double tapped!!!")
}
)
.disposed(by: disposeBag)


[b]下划[/b]

tapView.rx
.swipeGesture(.down)
.when(.recognized)
.subscribe(
onNext:{
_ in
print("swipe down!!!")
}
)
.disposed(by: disposeBag)


[b]水平划动[/b]

tapView.rx
.swipeGesture([.left, .right])
.when(.recognized)
.subscribe(
onNext:{
_ in
print("swipe left or right!!!")
}
)
.disposed(by: disposeBag)


[b]长按[/b]

tapView.rx
.longPressGesture()
.when(.began)
.subscribe(
onNext:{
_ in
print("long press")
}
)
.disposed(by: disposeBag)


[b]拖动[/b]

let panGesture = tapView.rx.panGesture().shareReplay(1)

panGesture
.when(.changed)
.asTranslation()
.subscribe(
onNext: {
[unowned self] translation, _ in
self.label.text = String(format: "(%.2f, %.2f)",translation.x, translation.y)
self.tapView.transform = CGAffineTransform(translationX: translation.x, y: translation.y)
}
)
.disposed(by: disposeBag)
panGesture
.when(.ended)
.subscribe(
onNext: { _ in
print("panGesture end")
}
)
.disposed(by: disposeBag)


[b]旋转[/b]

let rotationGesture = tapView.rx.rotationGesture().shareReplay(1)

rotationGesture
.when(.changed)
.asRotation()
.subscribe(
onNext: {
[unowned self] rotation, _ in
self.label.text = String(format: "%.2f rad", rotation)
self.tapView.transform = CGAffineTransform(rotationAngle: rotation)
}
)
.disposed(by: disposeBag)
rotationGesture
.when(.ended)
.subscribe(
onNext: { _ in
print("rotationGesture end")
}
)
.disposed(by: disposeBag)


[b]缩放[/b]

let pinchGesture = view.rx.pinchGesture().shareReplay(1)

pinchGesture
.when(.changed)
.asScale()
.subscribe(
onNext: {
[unowned self] scale, _ in
self.label.text = String(format: "x%.2f", scale)
self.tapView.transform = CGAffineTransform(scaleX: scale, y: scale)
}
)
.disposed(by: disposeBag)
pinchGesture
.when(.ended)
.subscribe(
onNext: { _ in
print("pinchGesture end")
}
)
.disposed(by: disposeBag)


[b]变换[/b]

let transformGestures = view.rx.transformGestures().shareReplay(1)

transformGestures
.when(.changed)
.asTransform()
.subscribe(
onNext: {
[unowned self] transform, _ in
self.label.numberOfLines = 3
self.label.text = String(format: "[%.2f, %.2f,\n%.2f, %.2f,\n%.2f, %.2f]", transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty)
self.tapView.transform = transform
}
)
.disposed(by: disposeBag)
transformGestures
.when(.ended)
.subscribe(
onNext: {
[unowned self] _ in
self.label.numberOfLines = 1
print("transformGestures end")
}
)
.disposed(by: disposeBag)


[b]屏幕边缘[/b]

view.rx
.screenEdgePanGesture(edges: .right)
.when(.recognized)
.subscribe(
onNext: {
_ in
print("right edge")
}
)
.disposed(by: disposeBag)


[b]组合[/b]

tapView.rx
.anyGesture(.tap(), .swipe([.up, .down]))
.when(.recognized)
.subscribe(
onNext: {
_ in
print("tap or up down")
}
).disposed(by: disposeBag)



过滤
默认对手势是没有过滤的,所以你会收到初始化的第一个手势事件。

下面是几种手势对应的状态:
[img]http://dl2.iteye.com/upload/attachment/0128/8725/b8caf161-f5c8-30d5-9f76-e6f2aa1f18a4.png[/img]

还可以组合不同条件的手势:

tapView.rx
.anyGesture(
(.tap(), when: .recognized),
(.pan(), when: .ended)
)
.subscribe(onNext: { gesture in
// Called whenever:
// - a tap is recognized (state == .recognized)
// - or a pan is ended (state == .ended)
print("tap is recognized or pan is ended")
})
.disposed(by: disposeBag)


代码
代码见github:

[url=https://github.com/AloneMonkey/RxSwiftStudy]RxSwiftRxGesture[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值