TouchesBegan всегда возвращает неправильный UIView - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу определить, когда я касаюсь чего-то другого, а не конкретного UIView.Я использую touchesBegan для этого, однако, он всегда печатает «прикосновение снаружи» (см. Код ниже).Чего мне не хватает?

Я получил помощь от этого сообщения .

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
        let hitView = self.view.hitTest(touch.location(in: self.view), with: event)
        if hitView === checkBackContainer {
            print("touch is inside")
        } else {
            print("touch is outside")
        }
    }
    super.touchesBegan(touches, with: event)
}

Якоря, добавленные внутрь ViewDidLoad Функция

private lazy var checkBackContainer = ImageUploadContainerView()

override func viewDidLoad(){
self.view.addSubview(checkBackContainer)
checkBackContainer.anchorCenterXToSuperview()
checkBackContainer.topAnchor.constraint(equalTo: checkFrontContainer.bottomAnchor, constant: 20).isActive = true
checkBackContainer.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 25).isActive = true
checkBackContainer.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: -25).isActive = true
checkBackContainer.heightAnchor.constraint(equalTo: checkBackContainer.widthAnchor, multiplier: 0.42).isActive = true
checkBackContainer.layer.applySketchShadow(color: UIColor.white, alpha: 1.0, x: 0, y: 0.33, blur: 1, spread: 0, cornerRadius: 6)

let backTap = UITapGestureRecognizer(target: self, action: #selector(self.backContainerTapped(_:)))
checkBackContainer.addGestureRecognizer(backTap) }

EDIT: ContainerView - это пользовательский UIView, в котором есть UIStackView s, UIlabel s и UIImageView s.Я обнаружил, что это потому, что пользовательский UIView, когда я меняю его на обычный UIView.Это работает.

1 Ответ

0 голосов
/ 14 ноября 2018

Попробуйте добавить UIGestureRecognizer к представлениям, которые вы хотите обнаружить на ощупь:

let tap = UITapGestureRecognizer(target: self, action: #selector(didTap(sender:)))
view1.addGestureRecognizer(tap)
view2.addGestureRecognizer(tap)

@objc func didTap(sender: UITapGestureRecognizer) {
//Perform whatever you want in here
}

В качестве альтернативы, вы можете перебрать все подпредставления родительского представления и исключить любые представления, которые хотите исключить, например, так:

for view in self.view.subviews {
   if view != viewYouWantToExclude {
      view.addGestureRecognizer(tap)
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...