https://cocoacasts.com/swift-fundamentals-working-with-tap-gesture-recognizers-in-swift
UITapGestureRecognizer
클래스를 이용해 탭 제스처를 사용하는 법.
import UIKit
class ViewController: UIViewController {
// MARK: - Properties
@IBOutlet private var tappableView: UIView! {
didSet {
tappableView.backgroundColor = .red
}
}
// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
}
}
tappableView
하나를 만들고 시작Main.storyboard
에 뷰 하나 만들고, tappableView
와 연결뷰에 tap gesture recognizer 추가하는 방법은 두 가지가 있다 - 코드로 또는 인터페이스 빌더로. 결과는 똑같지만 실행 방법이 다르다.
Main.storyboard
를 열고 Object Library(+버튼)에서 tap gesture recognizer를 아까 만든 tappableView
에 추가한다.ViewController.swift
를 열고 tap gesture recognizer에 대한 Action을 정의한다.UITapGestureRecognizer
라는 하나의 매개변수를 받는다.// MARK: - Actions
@IBAction func didTapView(_ sender: UITapGestureRecognizer) {
print("did tap view", sender)
}
Main.storyboard
에 가서 왼쪽 Document Outline에서 tap gesture recognizer를 선택한다View Controller
까지 드래그해 연결한다. didTapView(_:)
Action이 나타나면 클릭해 연결한다.먼저 위에서 실습한 Interface Builder의 tap gesture recognizer를 삭제한다.
viewDidLoad()
메서드를 찾는다.UITapGestureRecognizer
인스턴스를 init(target:action:)
메서드를 호출해 초기화한다.target
은 뷰컨트롤러, action
은 아까 정의한 didTapView(_:)
로 정의한다.// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
// Initialize Tap Gesture Recognizer
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapView(_:)))
}
// MARK: - Actions
@objc func didTapView(_ sender: UITapGestureRecognizer) {
print("did tap view", sender)
}
@IBAction
이라는 속성이 필요가 없다. 대신 @objc
라는 속성이 필요하다. @objc
라는 속성은 그 메서드가 Objective-C 의 실행시간에 노출되도록 한다. 자세한 건 나중에 배우게 될 것..@objc
속성을 빼먹으면 컴파일러 에러가 발생한다 - Argument of '#selector' refers to instance method 'didTapView' that is not exposed to Objective-C
tappableView
에 addGuestureRecognizer(_:)
를 호출하고, 매개변수로 tap gesture recognizer를 넘긴다.// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
// Initialize Tap Gesture Recognizer
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapView(_:)))
// Add Tap Gesture Recognizer
tappableView.addGestureRecognizer(tapGestureRecognizer)
}
tap gesture recognizer는 싱글 탭, 더블 탭, 트리플 탭을 감지할 수 있다. (기본적으로는 싱글 탭을 감지한다)
싱글 탭이 아닌 더블 탭을 감지하도록 하는 방법은 아래와 같다.
viewDidLoad()
에서 tapGestureRecognizer
의 .numberOfTapsRequired
를 2로 설정한다.// MARK: - View Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
// Initialize Tap Gesture Recognizer
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didTapView(_:)))
// Configure Tap Gesture Recognizer
tapGestureRecognizer.numberOfTapsRequired = 2
// Add Tap Gesture Recognizer
tappableView.addGestureRecognizer(tapGestureRecognizer)
}
didTapView(_:)
메서드가 실행되는지 확인한다.