Как бы я добавил функцию для прокрутки вниз временного уведомления в приложении?

#ios #swift #user-interface #uiview #uigesturerecognizer

Вопрос:

Я хотел, чтобы пользователь мог провести пальцем вниз, чтобы отклонить временное уведомление, которое приходит снизу.

Вот как выглядит код:

  func showAnimationToast(animationName: String, message: String, duration: Double = 3, color: UIColor = .label, fontColor: UIColor = .label) {
        view.endEditing(true)
        let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first!
        let toastView = UIView(frame: CGRect(x: 10, y: view.frame.size.height - view.safeAreaInsets.bottom, width: view.frame.size.width - 20, height: 60))
        toastView.layer.borderWidth = 2
        toastView.layer.borderColor = color.cgColor
        toastView.backgroundColor = UIColor.systemBackground.withAlphaComponent(0.9)
        
        //Differentiate between toasts and other UIViews in the master view
        toastView.tag = 1474
        
        let animationView = AnimationView(name: animationName)
        animationView.frame = CGRect(x: 5, y: 5, width: 50, height: 50)
        animationView.contentMode = .scaleAspectFill
        toastView.addSubview(animationView)
        
        let messageLabel = UILabel(frame: CGRect(x: toastView.frame.size.height, y: 5, width: toastView.frame.size.width - toastView.frame.size.height, height: 50))
        messageLabel.text = message
        messageLabel.font = UIFont(name: "DIN Alternate Bold", size: 22)
        messageLabel.textColor = fontColor
        toastView.addSubview(messageLabel)
        window.addSubview(toastView)
        
        toastView.isUserInteractionEnabled = true
        
        //Let Swipe Down Dismiss. Does not work
        let swipeDownGesture = UISwipeGestureRecognizer(target: self, action: #selector(dismissToast(_:)))
        swipeDownGesture.direction = .down
        toastView.addGestureRecognizer(swipeDownGesture)
        
        //Show "Toast"
        UIView.animate(withDuration: 0.2, delay: 0, animations: {
            toastView.frame.origin.y = self.view.frame.size.height - self.view.safeAreaInsets.bottom - 70
        }, completion: {_ in
            animationView.play()
        })
        
        //Remove "toast" after specific time.
        UIView.animate(withDuration: 0.2, delay: duration, animations: {
            toastView.center.y = self.view.frame.size.height   50
        }, completion: {_ in
            toastView.removeFromSuperview()
        })
    }
    
    @objc func dismissToast(_ sender: UIGestureRecognizer) {
        print("dismiss")
        let toastView = view.subviews.filter { view in
            if view.tag == 1474 {
                return true
            }
            return false
        }.last!
        
        UIView.animate(withDuration: 0.2, delay: 0, animations: {
            toastView.center.y = self.view.frame.size.height   50
        }, completion: {_ in
            toastView.removeFromSuperview()
        })
        
    }
 

Я попытался добавить распознаватель uiswipedowngesturer, но по какой-то причине, когда я провожу пальцем вниз, он никогда не вызывает действие. Чтобы проверить, я попытался добавить обычный распознаватель Uitapgesturer, и он тоже никогда не вызывался, даже когда я нажимал на него. Что мне делать?