# CallControls

The `CallControls` component lets you display any number of controls on the UI, that trigger different actions within a call. We provide default actions, such as changing the audio and video mute state or turning on the speakerphone and leaving the call.

On top of these actions, you can provide a custom set of actions through the API.

Let's see how to use it.

## Usage

The default `CallControlsView` is created by passing the `CallViewModel`:

```swift
public var body: some View {
    CallControlsView(viewModel: viewModel)
}
```

If you want to customize (or completely replace) the `CallControlsView`, you should use the `ViewFactory` method `makeCallControlsView`:

```swift
public func makeCallControlsView(viewModel: CallViewModel) -> some View {
    CustomCallControlsView(viewModel: viewModel)
}
```

Next, let's see the `CustomCallControlsView`:

```swift
struct CustomCallControlsView: View {

    @ObservedObject var viewModel: CallViewModel

    var body: some View {
        HStack(spacing: 32) {
            VideoIconView(viewModel: viewModel)
            MicrophoneIconView(viewModel: viewModel)
            ToggleCameraIconView(viewModel: viewModel)
            HangUpIconView(viewModel: viewModel)
        }
        .frame(maxWidth: .infinity)
        .frame(height: 85)
    }
}
```

In this example, we are building a custom call controls view, using buttons from the SDK, for muting video/audio, toggling camera and hanging up. You can easily add your own UI elements in the `HStack` above. You can use the `CallViewModel` for the standard call-related actions, or use the `Call` object directly for custom events and reactions (as described [here](/video/docs/ios/guides/custom-events/), and for permissions related actions (as described [here](/video/docs/ios/guides/permissions-and-moderation/)).

---

This page was last updated at 2025-08-15T14:16:39.445Z.

For the most recent version of this documentation, visit [https://getstream.io/video/docs/ios/ui-components/call/call-controls/](https://getstream.io/video/docs/ios/ui-components/call/call-controls/).