Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bwide/CollectionNode
a collectionView made for Sprite Kit
https://github.com/bwide/CollectionNode
carthage collection collectionview spritekit swift view xcode
Last synced: about 1 month ago
JSON representation
a collectionView made for Sprite Kit
- Host: GitHub
- URL: https://github.com/bwide/CollectionNode
- Owner: bwide
- License: mit
- Created: 2017-08-04T01:01:42.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-08-20T02:18:53.000Z (over 6 years ago)
- Last Synced: 2024-12-01T16:02:18.603Z (about 1 month ago)
- Topics: carthage, collection, collectionview, spritekit, swift, view, xcode
- Language: Swift
- Size: 20.9 MB
- Stars: 101
- Watchers: 4
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - CollectionNode - A swift framework for a collectionView in SpriteKit. (Games / Getting Started)
- awesome-ios-star - CollectionNode - A swift framework for a collectionView in SpriteKit. (Games / Getting Started)
README
# CollectionNode
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Badge w/ Version](https://cocoapod-badges.herokuapp.com/v/NSStringMask/badge.png)](https://cocoapods.org/pods/CollectionNode)
![MIT](https://cocoapod-badges.herokuapp.com/l/NSStringMask/badge.png)
![Swift 4.0.x](https://img.shields.io/badge/Swift-4.0.x-orange.svg)
[![Build Status](https://travis-ci.org/bwide/CollectionNode.svg?branch=master)](https://travis-ci.org/bwide/CollectionNode)A collectionView made for Sprite Kit
![Preview](https://github.com/bwide/BWCollectionView/blob/master/iphonePreview.gif)## installation
### Carthage
[Carthage](https://github.com/Carthage/Carthage) is a dependency manager that provides binary frameworks for your projects.
you can install Carthage through [Homebrew](http://brew.sh/), with the following command:
```bash
$ brew update
$ brew install carthage
```Then you need to tell carthage to integrate this framework in your Xcode project, by adding the following to your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile):
```ruby
github "bwide/CollectionNode"
```Now:
1. On your project folder, run `carthage update`
1. On your application target, drag `BWCollectionView.framework` into your Xcode project `Embedded Binaries`### CocoaPods
Add this to your [Podfile](https://guides.cocoapods.org/syntax/podfile.html)
```ruby
pod 'CollectionNode'
```### important
If you plan to upload your app you must follow additional instructions on Carthage's [README](https://github.com/Carthage/Carthage/blob/master/README.md) on adding frameworks to your application if you're building for iOS, tvOS, or watchOS.
## usage
1. Import ```CollectionNode``` module on your ```CollectionNodeScene``` class:
```swift
import CollectionNode
```2. Add a ```CollectionNode``` to ```CollectionNodeScene``` and set it's dataSource and Delegate:
```swift
private var myCollectionNode: CollectionNode!override func didMove(to view: SKView) {
myCollectionNode = CollectionNode(at: view)myCollectionNode.dataSource = self
myCollectionNode.delegate = selfaddChild(myCollectionNode)
}
```3. Conform this ```CollectionNodeScene``` to ```CollectionNodeDataSource``` and implement all it's methods:
```swift
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
}
}
```
4. Conform to ```CollectionNodeDelegate```and override the methods that you need:
```swift
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)")
}
}
```5. Update your ```CollectionNode``` with the scene:
```swift
override func update(_ currentTime: TimeInterval) {
collectionNode.update(currentTime)
}
```6. Now ```CollectionNode```will work with it's default implementation.
### Properties
```swift
private(set) public var index: Int
```
the current index of the CollectionNode```swift
public weak var dataSource: CollectionNodeDataSource?
```
the object that acts as data source for the collection view```swift
public weak var delegate: CollectionNodeDelegate?
```
the object that acts as delegate for the collection view```swift
public var spaceBetweenItems: CGFloat
```
the spacing between elements of the CollectionNode```swift
public var items: [CollectionNodeItem]
```
returns all the children of this node that are CollectionNodeItems### Methods
```swift
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%)```swift
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)```swift
public func reloadData()
```
reloads all the items in the collection### CollectionNodeDelegate
```swift
func collectionNode(_ collectionNode: CollectionNode, didShowItemAt index: Index) -> Void
```
returns the number of items to be displayed on this collectionNode```swift
func collectionNode(_ collectionNode: CollectionNode, didSelectItem item: CollectionNodeItem, at index: Index ) -> Void
```
called each time an item is selected### CollectionNodeDataSource
```swift
func numberOfItems() -> Int
```
here you should tell the number of items this collection will display```swift
func collectionNode(_ collection: CollectionNode, itemFor index: Index) -> CollectionNodeItem
```
here you should return an item for each index in the collectionVIew## Apps using CollectionNode
* [Tiles](https://itunes.apple.com/br/app/tiles-puzzle-game/id1253612564?mt=8)
![Preview](https://github.com/bwide/CollectionNode/blob/master/tiles.gif)
Show me your apps! if you have used this collection i'd love to see it, reach me in ```[email protected]``` you can send me images and i will post them here.