测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | 自定义 |
发布最后发布 | 2016年6月 |
SPM支持 SPM | ✗ |
由 Oktawian Chojnacki 维护。
依赖项 | |
Alamofire | ~> 3.0 |
Decodable | ~> 0.4 |
在您的开放式空间或团队室中挂上一个电视,向大家展示发生了什么,并让他们跟上进度。
这是一个轻量级的代码片段。电视屏幕要以横向模式使用,并将被分割成从远程配置文件加载的六个矩形小部件。这只是一个 UIView,所以您可以用任何您想的方式使用这个空间。尽管如此,小部件的更新是标准化的,因此您不应忽略这个约定。
加载配置、初始化并显示板的所需源代码集合。
这就是您配置中心板的方式
let autoStack = AutoStack()
let scheduler = Scheduler()
let dataDownloader = DataDownloader()
let availableBuilders: [WidgetBuilding] = [
ImageWidgetBuilder(dataDownloader: dataDownloader),
]
let configFileName = NSBundle.localConfigurationFileName
let configurationFetching = LocalConfigurationLoader(configFileName: configFileName,
availableBuilders: availableBuilders)
let boardController = GrandCentralBoardController(scheduler: self.scheduler, stack: self.autoStack)
let configurationRefresher = ConfigurationRefresher(interval: configRefreshInterval,
configuree: boardController,
fetcher: configurationFetching)
// in ViewController:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
view = autoStack
configurationRefresher.start()
}
如果您想做出贡献,请在 GitHub 创建一个 issue,并和我们一起讨论您的计划。这样我们可以为您提供帮助,并确保人们不会在相同的事情上工作。
如果您想打开 Pull Request,请确保您已安装 SwiftLint,并检查您的项目不生成警告或错误。任何警告都将导致 Travis build 脚本失败。
有一个单独的文章(TUTORIAL.md)覆盖添加新小部件。
一个小部件由四个主要组件组成
ViewModelRendering
协议的视图,用来显示信息。Widget
协议的控制器类,它暴露给调度程序,并连接前两个组件。WidgetBuilding
协议,使用配置文件中的设置实例化Widget。1080p的Widget画布
此尺寸是固定的,在tvOS上不会改变。
GCBCore v2.0将支持iOS目标,但画布尺寸尚未定义。
有两种方法可以配置Grand Central Board:使用遥控器或捆绑的配置文件。使用如下格式的JSON文件来配置Grand Central Board
{ "widgets":[
{"name":"somewatch", "settings": {"timeZone":"Europe/Warsaw"} },
{"name":"somewatch", "settings": {"timeZone":"Europe/Warsaw"} },
{"name":"somewatch", "settings": {"timeZone":"Europe/Warsaw"} },
{"name":"somewatch", "settings": {"timeZone":"Europe/Warsaw"} },
{"name":"somewatch", "settings": {"timeZone":"Europe/Warsaw"} },
{"name":"somewatch", "settings": {"timeZone":"Europe/Warsaw"} }
]}
注意:每个widget都会有自己的设置属性。
要从远程位置加载配置文件,编辑Info.plist
并将GCBRemoteConfigurationPath
设置为所需位置。确保将GCBAlwaysUseLocalConfigurationFile
设置为NO
。
要使用捆绑配置文件,将Info.plist
中的GCBAlwaysUseLocalConfigurationFile
设置为YES
。如有必要,编辑GCBLocalConfigurationFileName
并检查文件是否在“构建阶段”的“拷贝捆绑资源”中列出。出于开发目的,您还可以通过使用GrandCentralBoard-LocalConfig
模式来启动应用程序。
Widget视图应显示以下状态
来源应实现其中两个协议之一
protocol Synchronous : Source {
func read() -> ResultType
}
protocol Asynchronous : Source {
func read(closure: (ResultType) -> Void)
}
interval
可能会被忽略。public protocol Subscribable : Source {
var subscriptionBlock: ((ResultType) -> Void)? { get set }
}
失败可以静默处理,但对于某些widget,可能需要显示失败状态,选择权在您。
所有策略都继承自Source协议
public enum SourceType {
case Cumulative
case Momentary
}
public protocol UpdatingSource : class {
var interval: NSTimeInterval { get }
}
public protocol Source : UpdatingSource {
associatedtype ResultType
var sourceType: SourceType { get }
}