CocoaPods trunk is moving to be read-only. Read more on the blog, there are 14 months to go.
| TestsTested | ✗ | 
| LangLanguage | SwiftSwift | 
| License | MIT | 
| ReleasedLast Release | Oct 2017 | 
| SwiftSwift Version | 4.0 | 
| SPMSupports SPM | ✗ | 
Maintained by Bruno Fulber Wide.
A collectionView made for Sprite Kit
If you plan to upload your app you must follow additional instructions on Carthage's README on adding frameworks to your application if you're building for iOS, tvOS, or watchOS.
CollectionNode module on your  CollectionNodeScene  class:import CollectionNodeCollectionNode to CollectionNodeScene and set it's dataSource and Delegate:private var myCollectionNode: CollectionNode!
override func didMove(to view: SKView) {
    myCollectionNode = CollectionNode(at: view)
    myCollectionNode.dataSource = self
    myCollectionNode.delegate = self
    addChild(myCollectionNode)
}CollectionNodeScene to CollectionNodeDataSource and implement all it's methods:extension GameScene: CollectionNodeDataSource {
    func numberOfItems() -> Int {
        return EmojiModel.default.emojis.count
    }
    func collectionNode(_ collection: CollectionNode, itemFor index: Index) -> CollectionNodeItem {
        //create and configure items
        let item = EmojiItem()
        item.emoji = EmojiModel.default.emojis[index]
        return item
    }
}CollectionNodeDelegateand override the methods that you need:extension GameScene: CollectionNodeDelegate {
     func collectionNode(_ collectionNode: CollectionNode, didShowItemAt index: Index) {
        let growAction = SKAction.scale(to: 1.3, duration: 0.15)
        let shrinkAction = SKAction.scale(to: 1, duration: 0.15)
        collectionNode.item(at: index).run(growAction)
        collectionNode.children.filter{ emojiCollection.children.index(of: $0) != index }.forEach{ $0.run(shrinkAction) }
    }
    func collectionNode(_ collectionNode: CollectionNode, didSelectItem item: CollectionNodeItem, at index: Index) {
        print("selected \(item.name ?? "noNameItem") at index \(index)")
    }
}CollectionNodewill work with it's default implementation. Override it if you want custom behaviorUsage is pretty similar to the known UICollectionView, after you create your BWCollectionView object you'll need to give it some data to display with a data source object, which is any object that conforms to the BWCollectionViewDataSource protocol.
private(set) public var index: Intthe current index of the CollectionNode
public weak var dataSource: CollectionNodeDataSource?the object that acts as data source for the collection view
public weak var delegate: CollectionNodeDelegate?the object that acts as delegate for the collection view
public var spaceBetweenItems: CGFloatthe spacing between elements of the CollectionNode
public var items: [CollectionNodeItem]returns all the children of this node that are CollectionNodeItems
public func update(_ currentTime: TimeInterval, dampingRatio: Double)To be called on the scene's update. Allows this node to animate when touch is released
dampingRatio: the ratio for the collectionNode deacceleration (0 to 1 meaning the percentage of speed to deaccelerate when touch is released, default is 1%)
public func snap(to index: Index, withDuration duration: Double)snaps to an item at a given index
duration: The duration of the snap animation in seconds (default is 0.3)
public func reloadData()reloads all the items in the collection
func collectionNode(_ collectionNode: CollectionNode, didShowItemAt index: Index) -> Voidreturns the number of items to be displayed on this collectionNode
func collectionNode(_ collectionNode: CollectionNode, didSelectItem item: CollectionNodeItem, at index: Index ) -> Voidcalled each time an item is selected
func numberOfItems() -> Inthere you should tell the number of items this collection will display
func collectionNode(_ collection: CollectionNode, itemFor index: Index) -> CollectionNodeItemhere you should return an item for each index in the collectionVIew
update(_ currentTime:) method in your SKScene's Update method for it to properly work