SwiftUI 和 Combine - Stories intro 多平台组件

SwiftUI 示例

功能特点

1. 故事

定义符合 IStory 协议的枚举来表示您的故事

    public enum Stories: IStory {
          
        case first
        case second
        case third

        @ViewBuilder
        public func builder(progress : Binding<CGFloat>) -> some View {
            switch(self) {
                case .first:  StoryTpl(self, .green,  "1", progress)
                case .second: StoryTpl(self, .brown,  "2", progress)
                case .third:  StoryTpl(self, .purple, "3", progress)
            }
        }
        
        public var duration: TimeInterval {
            switch self{
                case .first, .third : return 5
                default : return 3
            }
        }

        public var colorScheme: ColorScheme? {
            switch(self) {
                case .first: return .light
                default: return .dark
            }
        }

    }

2. 创建故事组件

    StoriesWidget(
        manager: StoriesManager.self,
        stories: Stories.allCases
    )

可选

策略 描述
circle 重复故事
once 仅显示一次

添加视频组件

The concept

故事生命周期

您可以观察故事生命周期的事件并对其更改做出反应。将闭包传递给 StoriesWidget 的配置。

    StoriesWidget(
        manager: StoriesManager.self,
        stories: Stories.allCases                    
    ){ state in
        print("Do something on stories \(state) change")
    }
状态 描述
ready 等待开始。如果存在缓冲时间,则在此延迟期间处于此状态,然后才真正开始
start 真正开始
begin 故事开始
end 故事结束
suspend 在暂停时以及之后保持暂停状态,直到恢复。通知当前演示已暂停
resume 在恢复时以及之后保持恢复状态,直到下次暂停或故事结束
finish 真正结束。在 .once 策略结束时

Stories life circle

故事错误处理

存在对故事数据的内部检查

自定义故事错误处理

如果您需要对故事数据进行自定义检查,只需实现符合 IStoriesValidater 协议的验证器,并将其作为参数传递给 StoriesWidget

    StoriesWidget(
        manager: StoriesManager.self,
        stories: Stories.allCases,
        validator: CustomStoriesValidater.self
    )

这里有一个自定义验证器的示例。请查看 CustomStoriesValidater 的实现。如果存在错误,故事将不会开始,而是会显示包含错误描述的错误视图。

Custom error handling for stories

本地化 (En, Es)

所有可能发生的内部错误和系统消息都已本地化。故事的本地化取决于您,因为它是组件的外部来源。

Se localizan todos los errores internos y mensajes del sistema que puedan producirse. La localización de las historias depende de usted, ya que es la fuente externa del componente.

Custom stories error handling

click to watch expected UI behavior for the example

click to watch expected UI behavior for the example

click to watch expected UI behavior for the example

文档(API)