Skip to content

Instantly share code, notes, and snippets.

@GeekTree0101
Created May 8, 2019 06:55
Show Gist options
  • Save GeekTree0101/f9aba8229fc38d6b60bb408e701314b1 to your computer and use it in GitHub Desktop.
Save GeekTree0101/f9aba8229fc38d6b60bb408e701314b1 to your computer and use it in GitHub Desktop.
Wrapping ASTableNode/ASCollectionNode/ASPagerNode etc
import Foundation
import AsyncDisplayKit
class TestController: ASViewController<ASDisplayNode>, ASPagerDelegate, ASPagerDataSource {
lazy var topNode: ASDisplayNode = {
let node = ASDisplayNode()
node.backgroundColor = .red
node.style.height = .init(unit: .points, value: 40.0)
return node
}()
lazy var pagerNode: ASPagerNode = {
let node = ASPagerNode()
node.backgroundColor = .blue
return node
}()
init() {
super.init(node: .init())
self.node.backgroundColor = .white
self.node.automaticallyRelayoutOnSafeAreaChanges = true
self.node.automaticallyManagesSubnodes = true
pagerNode.setDataSource(self)
pagerNode.setDelegate(self)
self.node.layoutSpecBlock = { [unowned self] (_ , sizeRange) -> ASLayoutSpec in
return self.layoutSpec(sizeRange)
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func layoutSpec(_ constrainedSize: ASSizeRange) -> ASLayoutSpec {
// NOTE: Wrapping ASPagerNode
let pagerLayout = ASWrapperLayoutSpec.init(layoutElement: pagerNode)
pagerLayout.style.flexGrow = 1.0
pagerLayout.style.flexShrink = 1.0
let stack = ASStackLayoutSpec.init(direction: .vertical,
spacing: 0.0,
justifyContent: .start,
alignItems: .stretch,
children: [topNode, pagerLayout])
return ASInsetLayoutSpec.init(insets: self.node.safeAreaInsets, child: stack)
}
func pagerNode(_ pagerNode: ASPagerNode, nodeAt index: Int) -> ASCellNode {
let cellNode = ASCellNode()
cellNode.backgroundColor = UIColor.init(white: 0.5, alpha: 0.2)
return cellNode
}
func numberOfPages(in pagerNode: ASPagerNode) -> Int {
return 10
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment