The Game Controller namespace was added in iOS 7 and adds support for game controllers.
Game controllers come in two forms: "form-fitting" controllers that contain an iOS device and "extended wireless" controllers that wirelessly connect to an iOS device or a Mac.
Game controllers must be optional components: game developers must make their game playable by users who do not have game controllers.
Form-fitting controllers are automatically discovered by the system. Extended wireless controllers are discovered by the system subsequent to the application developer calling GCController.StartWirelessControllerDiscovery and will cause the GCController+Notifications.ObserveDidConnect notification handler to fire. When wireless controller disconnect, the GCController+Notifications.ObserveDidDisconnect notification fires.
There are two supported profiles for Game Controllers: GCGamepad and CGExtendedGamepad. A GCController will have a non-null value for either its CGController.Gamepad or its CGController.ExtendedGamepad property, the application developer must read those to determine the type.
CGExtendedGamepads have the same elements, plus two trigger buttons and two joysticks (see GCControllerAxisInput). Apple conceptual schematics additionally show an LED array, but there is currently no programmatic access to this element.
There are three ways to read game controller data:
|Polling||Properties such as GCControllerButtonInput.Pressed or GCControllerDirectionPad.XAxis||Directly read from the game-loop (see SKScene.Update).|
|Event-driven||Element's ValueChangedHandler property (such as GControllerButtonInput.ValueChangedHandler)||Game Controller processes updates on the main thread. The framework ensures that simultaneously-occurring events result in a series of single callbacks.|
|Coordinated Snapshot||CGGamepad.SaveSnapshot, CGExtendedGamepad.SaveSnapshot||Snapshots the controller state. Appropriate for marshalling, serialization, or delayed processing.|
The major classes in the Game Controller namespace are shown in the following illustration:
|GCController||A game controller, either form-fitting or extended wireless.|
|GCController+Notifications||Notification posted by the GCController class.|
|GCControllerAxisInput||A GCControllerElement representing a joystick.|
|GCControllerAxisValueChangedHandler||The delegate used as the value-changed handler for GCControllerAxisInput.ValueChangedHandler.|
|GCControllerButtonInput||A GCControllerElement representing a game-controller button.|
|GCControllerButtonValueChanged||Handler that can be passed to the GCControllerButtonInput.SetPressedChangedHandler method to respond to changes to button states.|
|GCControllerDirectionPad||A GCControllerElement representing a direction-pad.|
|GCControllerDirectionPadValueChangedHandler||The delegate used as the value-changed handler for GCControllerDirectionPad.ValueChangedHandler.|
|GCControllerElement||The base class for input elements of a game controller.|
|GCControllerPlayerIndex||Enumerates player controller indices.|
|GCEventViewController||View controller that can switch event delivery between the responder chain and the game controller.|
|GCExtendedGamepad||A gamepad with two shoulder buttons, two triggers, two thumbsticks, a D-Pad, and a directional button array.|
|GCExtendedGamepadSnapshot||A serializable snapshot of the game controller's state.|
|GCExtendedGamepadSnapShotDataV100||The state of a GCExtendedGamepad. Produced by GCExtendedGamepadSnapshot.TryGetSnapshotData.|
|GCExtendedGamepadValueChangedHandler||The delegate used as the value-changed handler for GCExtendedGamepad.ValueChangedHandler.|
|GCGamepad||A gamepad with two shoulder buttons, a D-Pad, and a directional button array..|
|GCGamepadSnapshot||A serializable snapshot of the game controller's state.|
|GCGamepadSnapShotDataV100||The state of a GCGamepad. Produced by GCGamepadSnapshot.TryGetSnapshotData.|
|GCGamepadValueChangedHandler||The delegate used as the value-changed handler for GCGamepad.ValueChangedHandler.|
|GCMicroGamepad||A logical mapping of hardware controller controls to a set of in-game elements.|
|GCMicroGamepadSnapshot||Gets snapshots of the state of a micro gamepad.|
|GCMicroGamepadSnapShotDataV100||Represents the instantaneous state of a micro gamepad in V100 format at a point in time.|
|GCMicroGamepadValueChangedHandler||A handler that is called whenever any single element of a controller changes.|
|GCMotion||Holds position data of a game controller.|