iOS
[iOS] cancelsTouchesInView 공식문서 & 예시
Kim_Baechu
2022. 8. 18. 14:12
https://developer.apple.com/documentation/uikit/uigesturerecognizer/1624218-cancelstouchesinview
cancelsTouchesInView
제스처가 인식됐을 때 뷰에 터치를 전달해 줄 것인가에 대한 Bool 값
이 값이 true(defalut)이고 리시버가 제스처를 인식하면, 제스처의 터치는 뷰에 전달되지 않고, touchesCancelled(_:with:)message가 뷰에 전달되고 이미 전달된 터치도 캔슬됩니다.
만약에 gesture recognizer가 제스처를 인식하지 못하거나, 이 값이 false이면 뷰는 모든 터치를 전달받습니다.
예시
여기 노란색뷰는 collectionView입니다.
collectionView의 cell은 회색입니다.
cell은 터치이벤트를 처리할 수 있습니다.
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath.item)
}
cell에 파란뷰를 넣고 파란뷰에 제스처를 추가했습니다.
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture))
blueView.addGestureRecognizer(tap)
...
@objc func handleTapGesture(_ sender: UIGestureRecognizer) {
print(#function, sender.state.description)
}
여기서 회색뷰를 탭하면 다음과 같이 프린트됩니다.
0
여기서 파란뷰를 탭하면 다음과 같이 프린트됩니다.
handleInnerTapGesture(_:) ended
만약에 여기서 두손가락 탭하면 제스처가 인식되지 않았기 때문에 인덱스만 프린트됩니다.
0
코드를 다음과 같이 추가해줍니다.
tap.cancelsTouchesInView = false
그리고 탭하면 다음과 같이 프린트됩니다.
handleInnerTapGesture(_:) ended
0
만약에 여기서 두손가락 탭하면 제스처가 인식되지 않았기 때문에 인덱스만 프린트됩니다.
0