Circle Story (iOS)

Use CircleStoryView

import UIKit
import FireworkVideo

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.addVideoFeedView()
    }

    func addVideoFeedView() {
        let channelID = "<Encoded Channel ID>"
        let playlistID = "<Encoded Playlist ID>"
        let source = VideoFeedContentSource.channelPlaylist(
            channelID: channelID,
            playlistID: playlistID
        )
        let circleStoryView = CircleStoryView(source: source)
        circleStoryView.isPictureInPictureEnabled = true

        circleStoryView.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(circleStoryView)

        NSLayoutConstraint.activate([
            circleStoryView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
            circleStoryView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
            circleStoryView.heightAnchor.constraint(equalToConstant: 240),
            circleStoryView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
        ])
    }
}

Use CircleStorySwiftUIView

Content Source

Please refer to Video Feed Content Source (iOS).

Autoplay

Autoplay lets the circle story automatically start playing the first eligible item without requiring user interaction. To enable it, set:

All behavior described below assumes this prerequisite is met. Which item is picked as "eligible" depends on the visibility threshold (viewConfiguration.itemView.autoplay.triggerVisibilityPercentage) and on whether viewport-based autoplay is turned on (useSafeAreaViewport).

Container-based autoplay (default)

When useSafeAreaViewport = false (the default), visibility is measured against the circle story component's own bounds:

  • Autoplay is active whenever the component is at least partially on screen, and inactive when the component is fully off-screen.

  • While active, the first item whose visibility within the component's bounds is greater than or equal to triggerVisibilityPercentage starts playing automatically.

Viewport-based autoplay

When the component is embedded in a ScrollView, TableView, or CollectionView, you can opt into viewport-based autoplay by setting useSafeAreaViewport = true on CircleStoryView or CircleStorySwiftUIView. In this mode, visibility is measured against the viewport rather than the component's own bounds:

  • The first item whose visibility within the viewport is greater than or equal to triggerVisibilityPercentage starts playing automatically.

  • The viewport itself is customizable via safeAreaEdges and additionalViewportExcludedInset (see below).

Customize viewport

The default viewport is defined as the screen bounds minus the safe area insets—such as the status bar, top navigation bar, bottom tab bar, and bottom home indicator.

However, you can further refine this viewport by specifying safeAreaEdges and additionalViewportExcludedInset. Please refer to the following code snippets for more details.

Last updated

Was this helpful?