현재보기 외부의 탭을 감지하는 방법이 있습니까? hitTest 메서드로 무언가를 구현하려했지만 실패했지만 잘 이해할 수는 없습니다.현재보기 외부의 탭을 감지하십시오.
4
A
답변
0
당신은 당신의보기 안에 있다면 터치가 배경 뷰했지만 "거짓"경우에만 "true"를 반환합니다 UIGestureRecognizerDelegate 프로토콜을
extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldReceive touch: UITouch) -> Bool {
return (touch.view === self.view)
}
}
를 사용할 수 있습니다.
참고 : ID 연산자 ===는 touch.view와 self.view를 비교합니다. 두 변수가 동일한 객체를 참조하는지 여부를 알고 싶습니다.
그리고 viewDidLoad()에서 gestureRecognizer를 만들고 대리자를 설정합니다.
let gestureRecognizer = UITapGestureRecognizer(target: self,action: #selector(yourActionMethod))
gestureRecognizer.cancelsTouchesInView = false
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)
5
당신이해야 할 일은 어떤 안에 당신이 원하는 (당신이 터치 세트에서 첫 번째 터치 객체를 얻을 수 있고 당신이보기에 그 터치의 위치를 확인해야 에서 touchesBegan입니다 터치 감지).
보기에서 터치 위치를 얻은 후 현재보기 (탭이 안쪽인지 바깥 쪽인지 확인해야하는보기) 여부를 확인해야합니다.
currentView의 프레임에 터치 위치가 포함되어 있으면 외부에서 뷰 내부에서 터치가 발생했음을 의미합니다.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
guard let location = touch?.location(in: self.view) else { return }
if !currentView.frame.contains(location) {
print("Tapped outside the view")
}else {
print("Tapped inside the view")
}
}
희망 하시겠습니까!
시도했습니다 touchesBegan : 방법 – ankit
현재보기가 포함 된보기에 tapGesture를 추가 할 수 있습니다. – Larme
다음과 같이 처리하고 있습니다. https://stackoverflow.com/a/48790850/7132300 – algrid