2019年8月17日土曜日

UIScreenEdgePanGestureRecognizerをプログラムで実装する

ViewControllerに実装する


storyboardではなく、プログラムでEdgeスワイプを実装してみました。
UIScreenEdgePanGestureRecognizerをViewController.viewに追加して、selectorを使ってメソッドでハンドリングします。


  1. class ViewController: UIViewController {
  2.  
  3. private let closer = SwipeEdgeCloser()
  4. override func viewDidLoad() {
  5. super.viewDidLoad()
  6.  
  7. let edgePan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleScreenEdgeSwiped))
  8. edgePan.edges = .left
  9. view.addGestureRecognizer(edgePan)
  10. }
  11.  
  12. @objc func handleScreenEdgeSwiped(_ recognizer: UIScreenEdgePanGestureRecognizer) {
  13. if recognizer.state == .recognized {
  14. print("Screen edge swiped!")
  15. }
  16. }
  17. }



クラスに実装する


ViewControllerがファットになりそうなので、クラス化してみました。処理はほぼ同様で、selectorを新しく作成したSwipeLeftEdgePanGestureのメソッドを指定しています。

  1. class ViewController: UIViewController {
  2.  
  3. private let closer = SwipeLeftEdgePanGesture()
  4. override func viewDidLoad() {
  5. super.viewDidLoad()
  6. view.addGestureRecognizer(closer.panGesture)
  7. }
  8. }
  9.  
  10. final class SwipeLeftEdgePanGesture {
  11. let panGesture: UIScreenEdgePanGestureRecognizer
  12. init() {
  13. panGesture = UIScreenEdgePanGestureRecognizer()
  14. panGesture.edges = .left
  15. panGesture.addTarget(self, action: #selector(SwipeLeftEdgePanGesture.screenEdgeSwiped))
  16. }
  17. @objc private func screenEdgeSwiped(_ recognizer: UIScreenEdgePanGestureRecognizer) {
  18. if recognizer.state == .recognized {
  19. print("SwipeLeftEdgePanGesture: Screen edge swiped!")
  20. }
  21. }
  22. }

0 件のコメント:

コメントを投稿