Post

Replies

Boosts

Views

Activity

GCController not working properly when open a second ViewController
i have a problem with the GCController framework: I have 2 viewcontrollers, each of them have a button to load the other viewcontroller. First controller code: import Cocoa import GameController class ViewController: NSViewController { @IBAction func abirVc2(_ sender: Any) { if let controller = self.storyboard?.instantiateController(withIdentifier: "ViewController2") as? ViewController2 { self.view.window?.contentViewController = controller } } override func viewDidLoad() { super.viewDidLoad() startWatchingForControllers() // Do any additional setup after loading the view. } override var representedObject: Any? { didSet { // Update the view, if already loaded. } } func startWatchingForControllers() { // Subscribe for the notes let ctr = NotificationCenter.default ctr.addObserver(forName: .GCControllerDidConnect, object: nil, queue: .main) { note in if let ctrl = note.object as? GCController { self.add(ctrl) } } ctr.addObserver(forName: .GCControllerDidDisconnect, object: nil, queue: .main) { note in if let ctrl = note.object as? GCController { self.remove(ctrl) } } // and kick off discovery GCController.startWirelessControllerDiscovery(completionHandler: {}) } func stopWatchingForControllers() { GCController.stopWirelessControllerDiscovery() let ctr = NotificationCenter.default ctr.removeObserver(self, name: .GCControllerDidConnect, object: nil) ctr.removeObserver(self, name: .GCControllerDidDisconnect, object: nil) } func add(_ controller: GCController) { let name = String(describing:controller.vendorName) if let extendedGamepad = controller.extendedGamepad { print("connect extended \(name)") configureDPadButtons(extendedGamepad) //configureDiamondButtons(extendedGamepad) //configureShoulderButtons(extendedGamepad) //configureTriggers(extendedGamepad) return } else if let gamepad = controller.microGamepad { print("connect micro (name)") } else { print("Huh? (name)") } } private func configureDPadButtons(_ gamepad: GCExtendedGamepad) { gamepad.dpad.up.pressedChangedHandler = {(button, value, pressed) in if let controller = self.storyboard?.instantiateController(withIdentifier: "ViewController2") as? ViewController2 { self.view.window?.contentViewController = controller } } gamepad.dpad.down.pressedChangedHandler = {(button, value, pressed) in print("ExtendedGamepad - Down") } gamepad.dpad.left.pressedChangedHandler = {(button, value, pressed) in print("ExtendedGamepad - Left") } gamepad.dpad.right.pressedChangedHandler = {(button, value, pressed) in print("ExtendedGamepad - Right") } } func remove(_ controller: GCController) { } } Second Controller code: import Cocoa class ViewController2: NSViewController { @IBAction func abrirHomeView(_ sender: Any) { if let controller = self.storyboard?.instantiateController(withIdentifier: "HomeView") as? ViewController { self.view.window?.contentViewController = controller } } override func viewDidLoad() { super.viewDidLoad() // Do view setup here. } } On the first controller i press the button to load the second, and then press the second viewcontroller´s button to return to the first one. And it works everytime I press the buttons. Then i use the GamePad´s Up arrow to load viewController 2, it loads correctly, then i use the button on second viewcontroller to return to first controller, ok it works too, but if i use the GamePad´s up button to load the second controller again, it does not do anything... It seems that function that handles the GamePad Up arrow can´t load again the second viewController. I used a simple project to make the test and it´s simple as this, 2 view controllers with one button each... I don´t know what is happening... Thanks in advance
2
0
1.4k
Feb ’22