定义符合 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
}
}
}
manager
- 包的标准管理器 StoriesManager.self,用于管理故事生命周期。stories
- 符合 IStory 协议的故事 StoriesWidget(
manager: StoriesManager.self,
stories: Stories.allCases
)
strategy
- 默认策略为 circle策略 | 描述 |
---|---|
circle | 重复故事 |
once | 仅显示一次 |
current
- 如果未定义,则从第一个故事开始
leeway
- 故事开始前的延迟,默认为 .seconds(0)
pause
- 用于通过非 StoriesWidget 内部的外部来源控制故事运行的共享变量,默认为 .constant(false)。例如,如果您启动了一个模态视图,并且需要在模态视图存在期间暂停正在运行的故事,则可以通过在 StoriesWidget 中作为绑定传递共享变量来实现。
validator
- 自定义验证器,用于在开始前检查故事数据集的有效性
onStoriesStateChanged
- 用于响应故事状态更改的闭包
您可以观察故事生命周期的事件并对其更改做出反应。将闭包传递给 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 策略结束时 |
存在对故事数据的内部检查
如果您需要对故事数据进行自定义检查,只需实现符合 IStoriesValidater 协议的验证器,并将其作为参数传递给 StoriesWidget
StoriesWidget(
manager: StoriesManager.self,
stories: Stories.allCases,
validator: CustomStoriesValidater.self
)
这里有一个自定义验证器的示例。请查看 CustomStoriesValidater 的实现。如果存在错误,故事将不会开始,而是会显示包含错误描述的错误视图。
所有可能发生的内部错误和系统消息都已本地化。故事的本地化取决于您,因为它是组件的外部来源。
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.