概念
Texture 提供了各种基本组件,如 ASTableNode、ASControlNode、ASButtonNode 等。
参考:Node 子类
这个库专注于 ASControlNode,为 ASImageNode(UIImageView)、ASNetworkImageNode(UIImageView)、ASButtonNode 等提供了便捷的交互包装。
示例
扩展
ASBinder
: 订阅的观察者异步操作。
期望流程 | 期望界面 |
但是,节点不知道在绘制之前事件值已应用于 UI。
未期望流程 | 未期望界面 |
在这种情况下,节点应该使用setNeedsLayout。但是,[bind:_]不会自动调用setNeedsLayout。
通常,您可以使用以下代码
// Profile NetworkImage Node is default
// username, description is Optional
// *** self is usernameNode supernode
viewModel.username
.subscribe(onNext: { [weak self] text in
self?.usernameNode.rx.text(Node.usernameAttributes).onNext(text)
self?.setNeedsLayout() // Here
})
.disposed(by: disposeBag)
如果您使用ASBinder,则不需要调用setNeedsLayout。ASBinder会自动操作。
// Profile NetworkImage Node is default
// username, description is Optional
// *** self is usernameNode supernode
viewModel.username
.bind(to: usernameNode.rx.text(Node.usernameAttributes),
setNeedsLayout: self)
.disposed(by: disposeBag)
// *** self is descriptionNode supernode
viewModel.desc
.bind(to: descriptionNode.rx.text(Node.descAttributes),
setNeedsLayout: self)
.disposed(by: disposeBag)
如果您不需要setNeedsLayout,则编写代码如下。
// setNeedsLayout default is nil!
viewModel.username
.bind(to: usernameNode.rx.text(Node.usernameAttributes)
.disposed(by: disposeBag)
viewModel.desc
.bind(to: descriptionNode.rx.text(Node.descAttributes))
.disposed(by: disposeBag)
ASBinder流程 | 输出UI |
安装
GTTexture-RxExtension可以通过CocoaPods获取。要安装它,只需在Podfile中添加以下行即可
pod 'GTTexture-RxExtension'
作者
Geektree0101,[email protected]
许可证
GTTexture-RxExtension可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件