会社の人からタップジェスチャをコールバックで書けるpodのframeworkが便利って聞いたので、独自実装メモ。
自分の中で今後UIViewの代わりにUIViewを継承したclassを作成。
で、そこにタップジェスチャの定義とコールバックの定義を追加して、UIViewControllerから利用する。
まずはUIViewを継承して自分用のViewクラス
import UIKit
///
/// ベースビュー
///
class V: UIView, UIGestureRecognizerDelegate {
// MARK: ------------------------------ UIGestureRecognizer
///
/// コールバック関数
///
private var _singleTapAction: ((_ g: UITapGestureRecognizer) -> Void)?
///
/// シングルタップ設定
///
func singleTap(_ action: ((_ g: UITapGestureRecognizer) -> Void)?) {
let singleTapGesture: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: #selector(V._singleTapSelector(_:))
)
singleTapGesture.delegate = self
singleTapGesture.numberOfTapsRequired = 1
singleTapGesture.numberOfTouchesRequired = 1
self.addGestureRecognizer(singleTapGesture)
self._singleTapAction = action
}
///
/// selector用
///
@objc private func _singleTapSelector(_ g: UITapGestureRecognizer) {
self._singleTapAction?(g)
}
}
利用するUIViewController側
let view: V = V.init()
view.singleTap { (g) in
if UIGestureRecognizerState.ended == g.state {
///
/// 何か処理
///
}
}
コールバックで書けた方が分かり易いかも。
ダルブタップやロングタップも追加してみようかな。