1

У меня проблемы с получением UITapGestureRecognizer для регистрации касаний пользователя. showMenu() функция должна отображать частично прозрачный blackView к пользователю, и я реализовал жест распознаватель, так что, когда пользователь нажимает на blackView, уволить() является и делает вид затухающим.Swift: Gesture Recognizer не регистрирует краны

В моей консоли XCode я не получаю сообщение печати «отклонено», как указано в коде.

Заранее благодарен!

func showMenu(){ 
    print("show") 

    if let window = UIApplication.sharedApplication().keyWindow{ 

     blackView.backgroundColor = UIColor(white: 0, alpha: 0.5) 

     blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(dismiss))) 

     window.addSubview(blackView) 
     blackView.frame = window.frame 
     blackView.alpha = 0 

     //Added this line 
     blackView.userInteractionEnabled = true 

     UIView.animateWithDuration(0.5){ 
      self.blackView.alpha = 1 
     } 
    } 
} 

func dismiss(){ 
    print("dismiss") 

    UIView.animateWithDuration(0.5){ 
     self.blackView.alpha = 0 
    } 
} 

EDIT: Я проверил, чтобы увидеть, если какие-либо взгляды на вершине угон краны с помощью инструмента Просмотр иерархии отладки, но не кажется, что будет что-нибудь выше blackView, я также явно задано blackView, чтобы разрешить взаимодействие с пользователем.

EDIT: Снимок экрана интерфейса отладки представления иерархии.

+1

Вы пытались установить numberOfTapsRequired для 1? – Scriptable

+0

@Scriptable, просто сделал. К сожалению, я получаю те же результаты. – BlackDeveraux

+0

Хм, хорошо, код выглядит нормально для меня, не могли бы вы попытаться поднять subview на передний план? 'self.view.bringSubviewToFront (blackView)' после добавления subView, посмотрите, помогает ли это. Я не могу проверить его на минуту, просто придумываю идеи – Scriptable

ответ

3

Если изменить вид альфа до нуля он перестает получать события прикосновения.

Вы могли бы попытаться изменить цвет фона вида по прозрачным, вместо того чтобы изменить альфа вида по таким образом ваш взгляд не будет виден, и вы получите события

+0

Возможно ли анимировать переход прозрачности? – BlackDeveraux

+0

Вместо self.blackView.alpha = 0 положите в свой UIView.animateWithDuration self.blackView.backgroundColor =

+0

Хорошо. Но в моем коде, когда я должен прикоснуться к * blackView *, значения альфах технически устанавливаются в 1, как показано на рисунке. Я не верю, что корневая проблема связана с альфа-значениями, что еще могло пойти не так? – BlackDeveraux

1

Добавить это в ваш код. Он распознает, было ли 1 касание, а затем вы можете вызвать метод увольнения.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let touch = touches.first?.tapCount 
    if touch == 1 { 
     // Call Dismiss 
     dismiss() 
    } 
}