Swift 中的 ASCollectionView 和 ASCellNode
ASCollectionView and ASCellNode in Swift
我正在尝试使用 AsyncDisplayKit 将图像加载到我的应用程序中。我正在将我的集合视图创建为 ASCollectionView,就像这样,在 viewDidLoad:
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: 90, height: 90)
let collection = ASCollectionView(frame: view.frame, collectionViewLayout: layout)
collection.asyncDataSource = self
collection.asyncDelegate = self
collection.registerClass(cell1.self, forCellWithReuseIdentifier: "cell1")
self.view.layer.addSublayer(collection.layer)
这是我的 nodeForItemAtIndexPath:
func collectionView(collectionView: ASCollectionView, nodeForItemAtIndexPath indexPath:
NSIndexPath) -> ASCellNode {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell1",
forIndexPath: indexPath) as! cell1
return cell
}
nodeForItemAtindexPath 是 cellForItemAtIndexPath 的 AsyncDisplayKit 版本。它必须与 ASCollectionView 一起使用。
问题是方法"collecitonView.dequeueRreusableCellWithReuseIdentifier" returns一个UICollecitonViewCell。我的单元格不是那个,它是一个 ASCellNode。所以我得到一个错误:"cast from UICollectionViewCell to unrelated type ASNodeCell always fails".
我在这一行也遇到错误:
collection.registerClass(cell1.self, forCellWithReuseIdentifier: "cell1")
错误显示 "attempt to register a cell class which is not a subclass of UICollectionViewCell."
还有其他方法可以解决这个问题吗?我几乎到处搜索,但在 Swift(或 obj c)中关于 asyncdisplaykit 的可用资源很少,而且我找不到一个使用 ASCollectionView 的示例项目。任何帮助,将不胜感激。
使用 AsyncDisplayKit 时,无需使用 ASCollectionNode/View
注册单元格 类
在您的 nodeForItemAtIndexPath
中,您需要每次都实例化一个新的单元节点,而不是使单元出列。
func collectionView(collectionView: ASCollectionView, nodeForItemAtIndexPath indexPath: NSIndexPath) -> ASCellNode {
let node = ASCellNode()
return node
}
AsyncDisplayKit github 项目有更多关于如何实现这个的例子
我正在尝试使用 AsyncDisplayKit 将图像加载到我的应用程序中。我正在将我的集合视图创建为 ASCollectionView,就像这样,在 viewDidLoad:
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: 90, height: 90)
let collection = ASCollectionView(frame: view.frame, collectionViewLayout: layout)
collection.asyncDataSource = self
collection.asyncDelegate = self
collection.registerClass(cell1.self, forCellWithReuseIdentifier: "cell1")
self.view.layer.addSublayer(collection.layer)
这是我的 nodeForItemAtIndexPath:
func collectionView(collectionView: ASCollectionView, nodeForItemAtIndexPath indexPath:
NSIndexPath) -> ASCellNode {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell1",
forIndexPath: indexPath) as! cell1
return cell
}
nodeForItemAtindexPath 是 cellForItemAtIndexPath 的 AsyncDisplayKit 版本。它必须与 ASCollectionView 一起使用。
问题是方法"collecitonView.dequeueRreusableCellWithReuseIdentifier" returns一个UICollecitonViewCell。我的单元格不是那个,它是一个 ASCellNode。所以我得到一个错误:"cast from UICollectionViewCell to unrelated type ASNodeCell always fails".
我在这一行也遇到错误:
collection.registerClass(cell1.self, forCellWithReuseIdentifier: "cell1")
错误显示 "attempt to register a cell class which is not a subclass of UICollectionViewCell."
还有其他方法可以解决这个问题吗?我几乎到处搜索,但在 Swift(或 obj c)中关于 asyncdisplaykit 的可用资源很少,而且我找不到一个使用 ASCollectionView 的示例项目。任何帮助,将不胜感激。
使用 AsyncDisplayKit 时,无需使用 ASCollectionNode/View
在您的 nodeForItemAtIndexPath
中,您需要每次都实例化一个新的单元节点,而不是使单元出列。
func collectionView(collectionView: ASCollectionView, nodeForItemAtIndexPath indexPath: NSIndexPath) -> ASCellNode {
let node = ASCellNode()
return node
}
AsyncDisplayKit github 项目有更多关于如何实现这个的例子