You can also do this without using pressesBegan,Cancel,Changed,Ended
The idea is that you provide a custom uipress and send it to the uiapplication.shared.pressesEnded and it gets called on the tap gesture pressEnded
open class MenuUIPress : UIPress {
	weak var view: UIView?
	init(view: UIView) {
		self.view = view
	}
	open override var timestamp: TimeInterval {
		Date().timeIntervalSince1970
	}
	open override var phase: UIPress.Phase {
		UIPress.Phase.began
	}
	open override var type: UIPress.PressType {
		UIPress.PressType.menu
	}
	open override var window: UIWindow? {
		view?.window
	}
	open override var responder: UIResponder? {
		view
	}
	open override var gestureRecognizers: [UIGestureRecognizer]? {
		return view?.gestureRecognizers
	}
}
class SignInViewController: UIViewController {
	func	viewDidLoad() {
			setUpTapGesture()
	 }
	 private func setUpTapGesture() {
		#if os(tvOS)
			let tap = UITapGestureRecognizer()
			tap.allowedPressTypes = [NSNumber(value: UIPress.PressType.menu.rawValue)]
			tap.addTarget(self, action: #selector(SignInViewController.sendEndMenuTap))
			view.addGestureRecognizer(tap)
		#endif
	}
	@objc func sendEndMenuTap(_ gestureRecognizer: UITapGestureRecognizer) {
		print("@@@@@ called on touch end 3 state=", gestureRecognizer.state.rawValue)
		UIApplication.shared.pressesEnded([MenuUIPress(view: view)], with: UIPressesEvent())
	}
}
Topic:
App & System Services
SubTopic:
Core OS
Tags: