带有网络图像的 NSCollectionView

Posted

技术标签:

【中文标题】带有网络图像的 NSCollectionView【英文标题】:NSCollectionView with a network image 【发布时间】:2014-03-27 00:07:01 【问题描述】:

我有一个NSCollectionView,其中一个子视图是NSImageView。实际图像需要在通过 API 调用后从网络服务器加载(实际上是两个网络请求)。显然我需要异步加载图像。我可以将NSImageView 的值绑定到NSValueTransformer,从而将模型ID 转换为NSImage,但是如何实现NSValueTransformer?它希望立即从其transformedValue: 方法返回,而我只能在那里触发网络请求。我不想使用同步网络阻塞线程。

【问题讨论】:

【参考方案1】:

与其使用会立即返回的 NSValueTransformer,不如将集合视图项子类化。对于每个项目,异步触发此子类中的事务。 在您的子类中为 NSImage 保留一个 IBOutlet,以便当从服务器接收到响应时,只需使用此 IBOUlet 设置 Image。 使用这种方法,当创建项目时,相应的视图控制器就会出现。对它进行子类化可以让您控制视图以及如何加载它。

我希望这会有所帮助。

【讨论】:

好的,当我创建子类时,我是否给它自己的 nib 文件?还是我只使用集合视图当前所在的笔尖?那么,我应该重写什么方法来设置图像?设置值:forKeyPath:?如何将绑定连接到子类?我必须全部在代码中完成还是可以使用界面生成器? 您为每个 Collection View 项目定义了一个 itemProtype。子类化集合视图项目,它将自行选择您的项目原型,即 nib 将接受它。在这个新的子类中创建 NSImageView 的 IBOutlet。在 loadView 中调用 [super loadView] 并调用您的事务。一旦在您的回调方法中接收到数据,然后使用 IBOutlet 的 setImage 方法设置图像。子类仅用于处理您的异步调用,因此在接口构建器中只需更改集合视图项的类。我希望你明白了。如果你愿意,我会添加一些代码。 我明白了。我必须在 NSCollectionViewItem 子类中覆盖 setRepresentedObject。还要确保引用视图以强制它从笔尖加载,否则插座很可能为零。

以上是关于带有网络图像的 NSCollectionView的主要内容,如果未能解决你的问题,请参考以下文章

来自带有 Opencv C 程序的网络摄像头的灰色图像,但 C++ 程序完美运行

带有神经网络的 OCR:数据提取

使用带有接受图像的文件输入来访问笔记本电脑上的网络摄像头

如何使用带有 Streamlit 的按钮显示文件夹中的图像?

如何使用 Flare 动画作为带有淡入动画的图像占位符

带有javascript的可旋转图像或div?