Circle Story (iOS)
Currently, we can implement circle story based on video feed.
Use VideoFeedViewController
class ViewController: UIViewController {
    func embedCircleFeedInViewController() {
        let channelID = "<Encoded Channel ID>"
        let playlistID = "<Encoded Playlist ID>"
        let source = VideoFeedContentSource.channelPlaylist(channelID: channelID, playlistID: playlistID)
        let feedHeight: CGFloat = 200
        let paddingTop: CGFloat = 10
        let paddingRight: CGFloat = 10
        let paddingBottom: CGFloat = 10
        let paddingLeft: CGFloat = 10
        let thumbnailHeight = feedHeight - paddingTop - paddingBottom
        let layout = VideoFeedHorizontalLayout()
        layout.contentInsets = UIEdgeInsets(top: paddingTop, left: paddingLeft, bottom: paddingBottom, right: paddingRight)
        layout.itemWidthRatio = 1.0
        let feedVC = VideoFeedViewController(
          layout: layout,
          source: source
        )
        var viewConfiguration = VideoFeedContentConfiguration()
        viewConfiguration.itemView.cornerRadius = thumbnailHeight / 2
        viewConfiguration.itemView.title.isHidden = true
        feedVC.viewConfiguration = viewConfiguration
        self.addChild(feedVC)
        feedVC.view.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(feedVC.view)
        NSLayoutConstraint.activate([
          feedVC.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
          feedVC.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
          feedVC.view.heightAnchor.constraint(equalToConstant: feedHeight),
          feedVC.view.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
        ])
        feedVC.didMove(toParent: self)
      }
}Use VideoFeedView
import UIKit
import FireworkVideo
import FireworkVideoUI
public class CircleThumbnailsView: UIView {
    let source: VideoFeedContentSource
    private var videoFeedView: VideoFeedView?
    
    public init(
        source: VideoFeedContentSource = VideoFeedContentSource.channelPlaylist(
            channelID: "<Encoded Channel ID>",
            playlistID: "<Encoded Playlist ID>"
        )
    ) {
        self.source = source
        super.init(frame: .zero)
        setupView()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    private func setupView() {
        backgroundColor = .white
        
        let feedHeight: CGFloat = 200
        let paddingTop: CGFloat = 10
        let paddingRight: CGFloat = 10
        let paddingBottom: CGFloat = 10
        let paddingLeft: CGFloat = 10
        let thumbnailHeight = feedHeight - paddingTop - paddingBottom
        
        let layout = VideoFeedHorizontalLayout()
        layout.contentInsets = UIEdgeInsets(top: paddingTop, left: paddingLeft, bottom: paddingBottom, right: paddingRight)
        layout.itemWidthRatio = 1.0
        
        let feedView = VideoFeedView(
            layout: layout,
            source: source
        )
        feedView.viewConfiguration.itemView.cornerRadius = thumbnailHeight / 2
        feedView.viewConfiguration.itemView.title.isHidden = true
        
        self.videoFeedView = feedView
        addSubview(feedView)
        feedView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            feedView.leadingAnchor.constraint(equalTo: leadingAnchor),
            feedView.trailingAnchor.constraint(equalTo: trailingAnchor),
            feedView.centerYAnchor.constraint(equalTo: centerYAnchor),
            feedView.heightAnchor.constraint(equalToConstant: feedHeight),
        ])
    }
}
Use VideoFeedSwiftUIView
import SwiftUI
import FireworkVideo
import FireworkVideoUI
public struct CircleThumbnailsSwiftUIView: View {
    private let source: VideoFeedContentSource
    private let feedHeight: CGFloat = 200
    private let paddingTop: CGFloat = 10
    private let paddingRight: CGFloat = 10
    private let paddingBottom: CGFloat = 10
    private let paddingLeft: CGFloat = 10
    
    public init(
        source: VideoFeedContentSource = VideoFeedContentSource.channelPlaylist(
            channelID: "<Encoded Channel ID>",
            playlistID: "<Encoded Playlist ID>"
        )
    ) {
        self.source = source
    }
    
    public var body: some View {
        VideoFeedSwiftUIView(
            layout: createLayout(),
            source: source,
            viewConfiguration: createViewConfiguration()
        )
        .frame(height: feedHeight)
        .background(Color.white)
    }
    
    private func createLayout() -> VideoFeedHorizontalLayout {
        let layout = VideoFeedHorizontalLayout()
        layout.contentInsets = UIEdgeInsets(top: paddingTop, left: paddingLeft, bottom: paddingBottom, right: paddingRight)
        layout.itemWidthRatio = 1.0
        return layout
    }
    
    private func createViewConfiguration() -> VideoFeedContentConfiguration {
        var config = VideoFeedContentConfiguration()
        let thumbnailHeight = feedHeight - paddingTop - paddingBottom
        config.itemView.cornerRadius = thumbnailHeight / 2
        config.itemView.title.isHidden = true
        return config
    }
}
Last updated
Was this helpful?
