Как переслать все события в элемент управления, кроме события длинного нажатия

Я хочу сделать секретный горячий угол, если пользователь нажимает и удерживает верхний правый угол (размер 100px * 100px), а затем показывает экран с паролем. Для других событий, например, в горячем углу касания, представление должно передать свое событие касания элементам управления ниже.

скриншот приложения

При щелчке по красноватой области (горячий угол) его событие касания должно перейти в текстовое поле (введите URL веб-сайта), под которым оно находится. И если это долгое нажатие, то должен показываться только сигнал тревоги.

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

class HotCornerView: UIView,UIGestureRecognizerDelegate {
    override init(frame: CGRect) {
        super.init(frame: frame)
        //addLongTapGestureToActivateHotCorner()
       // self.isUserInteractionEnabled = false
    }

    convenience init() {
        self.init(frame: CGRect.zero)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("This class does not support NSCoding")
    }

    func addLongTapGestureToActivateHotCorner() {
        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(longPressed(_:)))
        self.addGestureRecognizer(longPressRecognizer)
    }

    @objc func longPressed(_ sender: UILongPressGestureRecognizer){
        self.delegate?.hotCornerViewActivated()
    }

    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        //self.delegate?.hotCornerViewActivated()
        //print("point=\(point)")
        for subview in subviews as [UIView] {
            if !subview.isHidden && subview.alpha > 0 && subview.isUserInteractionEnabled && subview.point(inside: convert(point, to: subview), with: event) {
                return true
            }
        }
        return false
    }
}

0 ответов

Другие вопросы по тегам