<!--
{
  "documentType" : "article",
  "framework" : "GameController",
  "identifier" : "/documentation/GameController/input",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Input"
}
-->

# Input

Receive controller input in the way that best integrates with the flow of your game or game engine.

## Topics

### Essentials

[Handling input events](/documentation/GameController/handling-input-events)

Receive controller input using either polling or callbacks.

[`protocol GCDevicePhysicalInput`](/documentation/GameController/GCDevicePhysicalInput)

The common properties and methods for objects that represent the input profile of a device.

[`protocol GCDevicePhysicalInputState`](/documentation/GameController/GCDevicePhysicalInputState)

The common properties for physical devices with elements.

[`protocol GCDevicePhysicalInputStateDiff`](/documentation/GameController/GCDevicePhysicalInputStateDiff)

The common functions for objects that contain the differences between a current and previous input state object.

### Elements

[`struct GCPhysicalInputElementCollection`](/documentation/GameController/GCPhysicalInputElementCollection-swift.struct)

A collection of physical input elements.

[`@interface GCPhysicalInputElementCollection : NSObject`](/documentation/GameController/GCPhysicalInputElementCollection-c.class)

A collection of physical input elements.

[`protocol GCPhysicalInputElement`](/documentation/GameController/GCPhysicalInputElement)

The common properties of physical input elements.

[`protocol GCButtonElement`](/documentation/GameController/GCButtonElement)

The common properties of an element that represents a momentary switch, such as a push button.

[`protocol GCAxisElement`](/documentation/GameController/GCAxisElement)

The common properties for an element that represents an absolute or relative input value along an axis.

[`protocol GCSwitchElement`](/documentation/GameController/GCSwitchElement)

The common properties for an element that represents a switch.

[`protocol GCDirectionPadElement`](/documentation/GameController/GCDirectionPadElement)

The common properties of elements that represent directional pads.

### Element inputs

[`protocol GCPhysicalInputSource`](/documentation/GameController/GCPhysicalInputSource)

A protocol for a description of an element without any system-level remapping of the controls.

### Element names

[`struct GCPhysicalInputElementName`](/documentation/GameController/GCPhysicalInputElementName-swift.struct)

The name of a physical input element.

[`protocol GCPhysicalInputElementTypedName`](/documentation/GameController/GCPhysicalInputElementTypedName)

A type-safe name for accessing elements of a physical input element collection.

[`struct GCButtonElementName`](/documentation/GameController/GCButtonElementName-swift.struct)

The names of the button elements.

[`struct GCAxisElementName`](/documentation/GameController/GCAxisElementName-swift.struct)

The names for the elements that provide values along an axis.

[`struct GCSwitchElementName`](/documentation/GameController/GCSwitchElementName-swift.struct)

The name for an element that represents a switch.

[`struct GCDirectionPadElementName`](/documentation/GameController/GCDirectionPadElementName-swift.struct)

The names for directional pad elements.

[`@protocol GCPhysicalInputElementName`](/documentation/GameController/GCPhysicalInputElementName-c.protocol)

The name of a physical input element.

[`typedef NSString<GCPhysicalInputElementName> * const GCInputElementName;`](/documentation/GameController/GCInputElementName)

The Objective-C type for an input element name.

[`@protocol GCButtonElementName <GCPhysicalInputElementName>`](/documentation/GameController/GCButtonElementName-c.protocol)

The names of the button elements.

[`@protocol GCAxisElementName <GCPhysicalInputElementName>`](/documentation/GameController/GCAxisElementName-c.protocol)

The names for the elements that provide values along an axis.

[`@protocol GCSwitchElementName <GCPhysicalInputElementName>`](/documentation/GameController/GCSwitchElementName-c.protocol)

The name for an element that represents a switch.

[`@protocol GCDirectionPadElementName <GCPhysicalInputElementName>`](/documentation/GameController/GCDirectionPadElementName-c.protocol)

The names for directional pad elements.

[Extended gamepad input names](/documentation/GameController/extended-gamepad-input-names)

Constants for names of extended gamepad elements.

[DualShock controller input names](/documentation/GameController/dualshock-controller-input-names)

Constants for names of DualShock 4 elements.

[Xbox controller input names](/documentation/GameController/xbox-controller-input-names)

Constants for names of Xbox elements.

[Micro gamepad input names](/documentation/GameController/micro-gamepad-input-names)

Constants for names of micro gamepad elements.

[Directional Gamepad Input Names](/documentation/GameController/directional-gamepad-input-names)

Constants for names of directional pad elements.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)