내 iOS 앱의 맨 앞면에 (배경) 마스크보기를 추가하려고합니다. 해당 마스크보기에서 마스크보기를 닫을 UITapGestureRecognizer를 추가하고 싶습니다. 궁극적으로 중간에 팝업을 표시하고 싶습니다 (예 : 내 마스크보기가 팝업의 희미한 배경 임).하지만 지금은 예상대로 내 배경을 해제하는 데 문제가 있습니다.TapGestureRecognizer가 터치를받지 않는 전면 UIView
코드는 다음과 같습니다. 나는 가장 앞쪽에있는 창을 얻습니다. 배경 화면을 만들고 알파를 추가합니다. 그런 다음 제스처 인식기를 추가하고 창에 추가하고 제약 조건을 추가합니다.
그러나 제 탭 제스처 대상 didTapOnMaskView()
이 실행되지 않습니다.
private func createMaskView() {
let applicationKeyWindow = UIApplication.shared.windows.last
backgroundView = UIView()
backgroundView.translatesAutoresizingMaskIntoConstraints = false
backgroundView.backgroundColor = UIColor(white: 0, alpha: 0.2)
backgroundDismissGesture = UITapGestureRecognizer(target: self, action: #selector(didTapOnMaskView))
backgroundDismissGesture.numberOfTapsRequired = 1
backgroundDismissGesture.cancelsTouchesInView = false;
backgroundView.addGestureRecognizer(backgroundDismissGesture)
backgroundView.isUserInteractionEnabled = true
backgroundView.alpha = 0.0
UIView.animate(withDuration: 0.4) {
self.backgroundView.alpha = 1.0
}
applicationKeyWindow.addSubview(backgroundView)
let views: [String: UIView] = [ "backgroundView": backgroundView]
var allConstraints = [NSLayoutConstraint]()
let verticalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[backgroundView]-0-|", options: [], metrics: nil, views: views)
allConstraints += verticalConstraint
let horizontalConstraint = NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[backgroundView]-0-|", options: [], metrics: nil, views: views)
allConstraints += horizontalConstraint
NSLayoutConstraint.activate(allConstraints)
// This is super odd, but the gesture gets triggered until the following code block executes
DispatchQueue.main.asyncAfter(deadline: .now() + 3.1) {
applicationKeyWindow.bringSubview(toFront: self.backgroundView)
}
}
func didTapOnMaskView() {
hide()
}
func show(){
createMaskView()
}
** 수정 ** 좀 더 진단을 실행 한 후, 내가 발견 한 것을 내가 전면에 maskView을 제공 내 createMaskView()
의 끝 부분에 코드의 3 초 지연 블록을 추가하는 경우, 제스처는 해당 코드 블록이 실행될 때까지 처음 3.1 초 동안 작동합니다. 해당 코드 블록이 없으면 제스처 인식기가 전혀 작동하지 않습니다 (3.1 초도 걸리지 않음).
불행히도 아직 연락을받을 수 없습니다. 아무것도 바꾸지 않는 것 같아 ... – toddg
제스처 인식기를 적용하기 전에 이상하게 보일 수 있지만 제약 조건을 활성화 할 수는 있습니다. – KGJ
UIScreen 윈도우 경계 'UIView (frame : UIScreen.main.bounds)'를 사용했습니다. – KGJ