Skip to content

FluidGroup/TextureSwiftSupport

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ce33193 · Feb 25, 2025
Jan 16, 2025
Apr 8, 2024
Feb 25, 2025
Sep 8, 2023
Jan 10, 2024
Aug 17, 2019
Feb 25, 2025
Feb 25, 2025
Sep 7, 2023

Repository files navigation

TextureSwiftSupport - Gains up your productivity

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.

Requirements

Swiift 5.3+

The cases of usage in Production

Layout DSL

Using resultBuilders, ASLayoutSpec can be more simply and readable it's like SwiftUI's decralations.

🕺🏻 You want to use this in AutoLayout?

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.
Since layoutSpecThatFits would be called multiple times.

Layouts

  • Basic Layouts

    • VStackLayout
    • HStackLayout
    • ZStackLayout
    • WrapperLayout
    • AbsoluteLayout
    • CenterLayout
    • RelativeLayout
    • InsetLayout
    • OverlayLayout
    • BackgroundLayout
    • AspectRatioLayout
    • SpacerLayout
  • Advanced Layouts

    • VGridLayout
    • AnyLayout
    • Switch

Modifiers

  • WIP

Composable components

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

Author

Muukii muukii.app@gmail.com