在topViewController中添加时,UIView手势识别器不起作用

时间:2018-10-10 21:58:47

标签: ios swift swift4 uigesturerecognizer

我正在尝试在最顶部的ViewController上添加一个视图。它实际上是有效的,但是当我尝试添加轻击手势识别器时,该操作不起作用。这是我的代码,我使用共享实例调用此类。可能是因为未保留对象?

class QFNotificationView: NSObject {

static let shared = QFNotificationView()

internal let keyWindow = UIApplication.shared.keyWindow!

private var titleLabel: UILabel = {
    let windowFrame = UIApplication.shared.keyWindow!.bounds
    let label = UILabel(frame: CGRect(x: 12, y: 15, width: windowFrame.width - 24, height: 20))
    label.font = UIFont(name: "WorkSans-SemiBold", size: 18)
    label.textColor = .darkishPurple
    return label
}()

private var descriptionLabel: UILabel = {
    let windowFrame = UIApplication.shared.keyWindow!.bounds
    let label = UILabel(frame: CGRect(x: 12, y: 35, width: windowFrame.width - 24, height: 40))
    label.font = UIFont(name: "WorkSans-Regular", size: 14)
    label.numberOfLines = 2
    label.textColor = .darkLavender
    return label
}()

private var notificationView: UIView = {
    let windowFrame = UIApplication.shared.keyWindow!.bounds
    let view = UIView(frame: CGRect(x: 0, y: -82, width: windowFrame.width, height: 82))
    view.backgroundColor = .white
    view.isUserInteractionEnabled = true
    return view
}()

var message: Message?

func show(message: Message) {
    self.message = message
    titleLabel.text = "Message"
    descriptionLabel.text = message.messageText
    notificationView.addSubview(titleLabel)
    notificationView.addSubview(descriptionLabel)
    if let topVC = UIApplication.getTopMostViewController() {
        topVC.view.addSubview(notificationView)
        notificationView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(didTap)))
        animateNotification()
    }

}

private func animateNotification() {
    UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseInOut, animations: {
        self.notificationView.frame = CGRect(x: 0, y: 0, width: self.keyWindow.bounds.width, height: 82)
    }) { (_) in
        UIView.animate(withDuration: 0.5, delay: 4, options: .curveEaseInOut, animations: {
            self.notificationView.frame = CGRect(x: 0, y: -82, width: self.keyWindow.bounds.width, height: 82)
        }) { (_) in
            self.notificationView.removeFromSuperview()
        }
    }
}

@objc func didTap() {
    print("CLICKEDD")
    if let topVC = UIApplication.getTopMostViewController() {
       let dest = ChatViewController.instantiateFromAppStoryboard(appStoryboard: .Main)
        dest.serviceRequestID = message?.serviceRequest
        topVC.navigationController?.pushViewController(dest, animated: true)
    }

}
}

1 个答案:

答案 0 :(得分:1)

我刚刚发现了问题。动画时,您无法与视图进行交互,事实就是如此。因此,我只是创建了一个容器视图来容纳通知卡,然后将手势识别器放置在容器上而不是正在显示动画的视图上。