CollectionNode 1.1.1

CollectionNode 1.1.1

测试测试过
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年10月
SwiftSwift 版本4.0
SPM支持 SPM

Bruno Fulber Wide 维护。



  • Bruno Fulber Wide

专为Sprite Kit创建的collectionView

Preview

安装

重要

如果您计划上传应用程序,必须在Carthage的README中遵循有关向iOS、tvOS或watchOS应用添加框架的额外说明。

使用方法

  1. 在您的CollectionNodeScene类中导入CollectionNode模块
import CollectionNode
  1. 将一个CollectionNode添加到CollectionNodeScene并设置它的dataSource和Delegate
private var myCollectionNode: CollectionNode!

override func didMove(to view: SKView) {
    myCollectionNode = CollectionNode(at: view)

    myCollectionNode.dataSource = self
    myCollectionNode.delegate = self

    addChild(myCollectionNode)
}
  1. 使这个CollectionNodeScene符合CollectionNodeDataSource并实现所有的方法
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
    }
}
  1. 符合CollectionNodeDelegate并重写您需要的方法
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)")
    }
}
  1. 现在CollectionNode将默认实现工作。如果您想自定义行为,则可以重写它。

使用方法与已知的UICollectionView非常相似。创建您的BWCollectionView对象后,您需要通过一个dataSource对象向其提供一些数据来显示。该对象是符合BWCollectionViewDataSource协议的任何对象。

属性

private(set) public var index: Int

CollectionNode的当前索引

public weak var dataSource: CollectionNodeDataSource?

作为collectionView数据源的对象

public weak var delegate: CollectionNodeDelegate?

作为collectionView代理的对象

public var spaceBetweenItems: CGFloat

CollectionNode元素之间的间距

public var items: [CollectionNodeItem]

返回此节点上的所有子项,它们都是CollectionNodeItems

方法

public func update(_ currentTime: TimeInterval, dampingRatio: Double)

需要在场景更新时调用。允许此节点在触摸释放时进行动画处理
阻尼率:collectionNode减速度的比率(0到1表示松开触摸时减速的百分比,默认为1%)

public func snap(to index: Index, withDuration duration: Double)

移动到给定索引处的项目
持续时间:收缩动画的持续时间(秒,默认为0.3)

public func reloadData()

重新加载collection中的所有项目

CollectionNodeDelegate

func collectionNode(_ collectionNode: CollectionNode, didShowItemAt index: Index) -> Void

返回要在此collectionNode上显示的项目数

func collectionNode(_ collectionNode: CollectionNode, didSelectItem item: CollectionNodeItem, at index: Index ) -> Void

每次选择一个项目时都会调用

CollectionNodeDataSource

func numberOfItems() -> Int

在这里,您应该说明这个collection将显示多少个项目

func collectionNode(_ collection: CollectionNode, itemFor index: Index) -> CollectionNodeItem

在这里,您应该返回每个索引处的collectionVIew的项目

重要

  1. 您必须在您的SKScene的Update方法中调用collection的update(_ currentTime:)方法,才能使其正常运行

使用CollectionNode的应用程序

Preview