gpt4 book ai didi

cocoa - NSCollectionView 类似延迟加载的行为

转载 作者:行者123 更新时间:2023-12-03 16:10:47 30 4
gpt4 key购买 nike

我正在尝试从 NSCollectionView 中获得类似延迟加载的行为。 (老实说,我以为它有它,就像 UITableView - 似乎是一个明显的遗漏?)

无论如何,我正在单元格中显示图像,并且希望在图像即将滚动到 View 中时加载图像,并在图像离开后卸载它们。

这是一个研究工具,不需要很漂亮 - 即:东西可以“弹出”。

有什么想法吗?我的第一个想法是找到某种方法让集合中的 View 知道它们何时出现在屏幕上,但是drawrect似乎被调用了很多次,远远超过屏幕上的 View 的次数。

最佳答案

正如您所提到的,NScollectionView 一次构建所有单元格。特别是如果单元格内有大量图像会导致性能问题。这就是我解决问题的方法。可能有更好的解决方案,但就我而言这工作得很好。很长一段时间以来,我一直在使用 Instruments 观察代码的性能,没有发现任何缺点。

- (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.
});
}
}
}
}

关于cocoa - NSCollectionView 类似延迟加载的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945914/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com