第 28 天 - RxGesture

今天讲GitHub - RxSwiftCommunity/RxGesture,RxGesture是封装UIGestureRecognizer的方法,帮助我们在任何view上面进行各种手势的侦测。

Before & After

在遇到RxGesture之前,我是这样写

let myView: UIView = UIView()

let tapGesture = UITapGestureRecognizer()
myView.addGestureRecognizer(tapGesture)

tapGesture.rx.event
    .debug("Tap")
    .subscribe()
    .disposed(by: disposeBag)

建立一个UITapGestureRecognizer(),给myView加入手势的识别,在用Rx的方式监听手势的事件。

当我遇到RxGesture之後,我变成这样写

let myView: UIView = UIView()

myView.rx.tapGesture()
    .when(.recognized)
    .debug("Tap")
    .subscribe()
    .disposed(by: disposeBag)

myView扩充了tap手势的事件,when可以帮助我们过滤UIGestureRecognizerState,使用时监听即可。

常用的手势

以下就记录一下常用的手势,假设我有一个UIView叫做myView

let myView = UIView(frame: .zero)
 
self.view.addSubview(myView)

myView.snp.makeConstraints { make in
    make.width.height.equalTo(200)
    make.center.equalToSuperview()
}

Tap 点一下

myView.rx.tapGesture()
    .when(.recognized)
    .subscribe(onNext: { _ in
        print("Tap")
    })
    .disposed(by: disposeBag)

Double Click 点两下

myView.rx.tapGesture() { gesture, _ in
        gesture.numberOfTapsRequired = 2
    }
    .when(.recognized)
    .subscribe(onNext: { _ in
        print("Double Click")
    })
    .disposed(by: disposeBag)

Long Press 长按

myView.rx.longPressGesture()
    .when(.began)
    .subscribe(onNext: { _ in
        print("Long Press")
    })
    .disposed(by: disposeBag)

Pan 拖移

myView.rx.panGesture()
    .when(.began, .changed, .ended)
    .subscribe(onNext: {
        $0.view?.center = $0.location(in: self.view)
        print("panGesture: \($0.state)")
    })
    .disposed(by: disposeBag)

Swipe 滑动

myView.rx.swipeGesture(.up, .down)
    .when(.recognized)
    .subscribe(onNext: {
        print("Swipe \($0.direction.rawValue)")
    })
    .disposed(by: disposeBag)

Pinch 缩放

myView.rx.pinchGesture()
    .when(.began, .changed, .ended)
    .subscribe(onNext: {
        $0.view?.transform = CGAffineTransform(scaleX: $0.scale, y: $0.scale)

        print("Pinch \($0.scale)")
    })
    .disposed(by: disposeBag)

Rotation 旋转

myView.rx.rotationGesture()
    .when(.began, .changed, .ended)
    .subscribe(onNext: {
        let angle = $0.rotation * (180 / CGFloat(Double.pi))
        $0.view?.transform = CGAffineTransform(rotationAngle: $0.rotation)

        print("Rotation: \($0.state), \(angle)")
    })
    .disposed(by: disposeBag)

以上,就是今天介绍RxGesture的内容,原本对手势没到很了解,工作上也不太接触,反倒是趁这机会接触了一下,满有趣的


倒数两天,相处时间不多了,明天见罗,大家掰掰


<<:  [铁人12:Day 28] 「AI 的未来十年」摘要 4:混合式架构

>>:  [Day27]用Canvas打造自己的游乐场-labyrinth 键盘控制角色

Day29 总结篇

Open-Match 配对框架为了可以弹性调整部署规模,使用了微服务架构并结合 kubernetes...

iOS APP 开发 OC 第十四天,打包签名,你真的懂吗? 阅读笔记

iOS APP 开发 OC 第十四天,签证 tags: OC 30 day 资料来源:iOS 打包签...

策略实作 - 葛兰碧八法

MoneyDJ理财网 - 葛兰碧八大法则 葛兰碧八法是根据移动平均线和股价之间的关系,来判断买入,卖...

# JS杂食-06--小实作之1

用HTML+纯JS试作一表单,规格: 两个输入框 一个提交按钮 点击按钮时显示:输入的两个数字总和 ...

Day 18 -SQL 函数 SUM()!

SUM() 函数用来计算一数值栏位的总合。用来算金额等数字类型的都很好用~ SUM() 语法 (SQ...