我试图从我的NSCollectionView中获取类似行为的延迟加载。 (老实说,我认为它有它,就像一个UITableView - 似乎是一个明显的遗漏?)
无论如何,我在单元格中显示图像,并希望加载图像,因为它们即将滚动到视图中,并在它们离开后卸载它们。
这是一个研究工具,不需要漂亮 - 即:东西可以“弹出”。
有什么想法吗?我的第一个想法是找到一些方法让集合中的视图知道它们何时在屏幕上,但是画面似乎被多次调用,远远超过屏幕上的视图。
答案 0 :(得分:7)
如您所述,NScollectionView
一次构建所有单元格。特别是如果单元格内有大量图像导致性能问题。这就是我解决问题的方法。可能有更好的解决方案,但这对我来说工作正常。
很长一段时间以来,我一直观察到仪器的代码性能,并没有看到任何不利因素。
- (void)windowDidLoad {
//Here adding observer to NSCollectionView's scrollview to monitor bounds changes.
NSView *contentView = [scrollViewOfYourCollectionView contentView];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(boundDidChange:) name:NSViewBoundsDidChangeNotification object:contentView];
}
- (void)boundDidChange:(NSNotification *)notification
{
NSRect collectionViewVisibleRect = yourCollectionView.visibleRect;
//collectionViewVisibleRect.size.height += 300; //If you want some preloading for lower cells...
for (int i = 0; i < yourDataSourceArray.count; i++) {
NSCollectionItem *item = [yourCollectionView itemAtIndex:i];
if (NSPointInRect(NSMakePoint(item.view.frame.origin.x, item.view.frame.origin.y), collectionViewVisibleRect) == YES)
{
if (item.imageView.image == nil) {
dispatch_async(dispatch_get_main_queue(), ^{
//Fill your cells.
//to showing/downloading images I am using SDWebImage.
});
}
}
}
}