This is a library to gain Texture(AsyncDisplayKit) more power in Swift.
- Readable Layout DSL
- Composable components
And you might need to use TextureBridging
to integrate with AutoLayout world in your applications.
Swiift 5.3+
- the products of eureka, Inc
Using resultBuilders
, ASLayoutSpec
can be more simply and readable it's like SwiftUI's decralations.
Before
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
ASStackLayoutSpec(
direction: .vertical,
spacing: 0,
justifyContent: .start,
alignItems: .start,
children: [
self.textNode1,
self.textNode2,
self.textNode3,
]
)
}
After
override func layoutSpecThatFits(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
LayoutSpec {
VStackLayout {
self.textNode1
self.textNode2
self.textNode3
}
}
}
Wrapping with LayoutSpec
enables us to write DSL inside this block.
More complicated example
LayoutSpec {
if flag {
VStackLayout {
HStackLayout(justifyContent: .center) {
iconNode
.padding(.top, 24)
.padding(.bottom, 16)
}
.background(gradientNode)
}
} else {
gradientNode
}
}
⚠️ Please take care of the differences between this DSL and SwiftUI.
This DSL just describes the node's layout. You should avoid to create a new node inside layout.
SincelayoutSpecThatFits
would be called multiple times.
-
Basic Layouts
- VStackLayout
- HStackLayout
- ZStackLayout
- WrapperLayout
- AbsoluteLayout
- CenterLayout
- RelativeLayout
- InsetLayout
- OverlayLayout
- BackgroundLayout
- AspectRatioLayout
- SpacerLayout
-
Advanced Layouts
- VGridLayout
- AnyLayout
- Switch
- WIP
TextureSwiftSupport
provides us a lot of components that help to create a new component with compositioning from small components.
Technically, composing increases a number of view or layer in run-time. It might reduce the performance a bit.
But most of the cases, that won't be matters.
- MaskingNode
- BackgroundNode
- OverlayNode
- PaddingNode
- WrapperCellNode
- WrapperNode
- ShapeLayerNode
- ShapeRenderingNode
- InteractiveNode
- AnyDisplayNode
- GradientNode
Muukii muukii.app@gmail.com