我可以将 NSImages 添加到我的 NSCollectionView 中,而无需先将它们保存在磁盘上。图像从 NSMutableArray 馈送到集合视图中。这样人们就可以看到图像而无需先保存它们。
我可以使用 IKImageBrowserView 实现类似的功能吗?NSCollectionView 在表示图像时很有用,但我想看看我是否可以用 IKImageBrowserView 做类似的事情。
我可以使用保存在磁盘上的图像轻松实现 IKImageBrowserView(Apple 文档介绍了它是如何工作的),但无法确切地知道在哪里查看或如何直接从 NSMutableArray 将图像添加到浏览器视图,而不是先将图像保存到磁盘.
我在这里不知所措。除了文档,我真的不确定在哪里寻找方向。或者我什至可以称之为我想要做的事情。
编辑:(这是一些代码)
// 数据对象——如果可以表示图像对象,这就是我可能出错的地方。
@interface ImageObject : NSObject
@property (readwrite, copy) NSImage *image;
@property (readwrite, copy) NSString *imageID;
- (id)initWithImage:(NSImage *)anImage;
- (NSString *)imageUID;
- (NSString *)imageRepresentationType;
- (id)imageRepresentation;
@end
@implementation ImageObject
@synthesize image = _image;
@synthesize imageID = _imageID;
- (id)initWithImage:(NSImage *)anImage
{
if (self = [super init]) {
_image = [anImage copy];
}
return self;
}
- (NSString *)imageUID
{
return _imageID;
}
- (NSString *)imageRepresentationType
{
return IKImageBrowserNSImageRepresentationType;
}
- (id)imageRepresentation
{
return _image;
}
@end
// 这就是将对象添加到 browserView 的方式。所有这些都直接来自苹果。
- (void)updateDatasource
{
[_browserImages addObjectsFromArray:_importedImages];
[_importedImages removeAllObjects];
[imageBrowser reloadData];
}
- (NSUInteger)numberOfItemsInImageBrowser:(IKImageBrowserView *)aBrowser
{
return [_browserImages count];
}
- (id)imageBrowser:(IKImageBrowserView *)aBrowser itemAtIndex:(NSUInteger)index
{
return [_browserImages objectAtIndex:index];
}
这是我尝试将 NSImages 添加到 browserView 但没有任何反应的地方。数组被填充(这意味着图像生成时没有任何错误)但屏幕上没有任何反应。
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[oPanel URL] options:nil];
NSMutableArray *timesArray = [self generateTimeForSpecifiedNumberOfFramesInVideo:10 UsingAsset:asset];
self.imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
[[self imageGenerator] generateCGImagesAsynchronouslyForTimes:timesArray completionHandler:^(CMTime requestedTime, CGImageRef image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError *error) {
NSImage *testImage = [[NSImage alloc] initWithCGImage:image size:NSZeroSize];
if (result == AVAssetImageGeneratorSucceeded) {
ImageObject *objects = [[ImageObject alloc] initWithImage:testImage];
[_importedImages addObject:objects];
}
}
至于探索其余的搜索结果......在那里做过。如果我确实遗漏了任何内容,请将此问题标记为重复,以表明已解决此问题的帖子。
编辑:
我已经接受了下面的答案。以及唯一 ID 问题。我忽略了一个简单的事情,即调用 updateDatasource 方法的要求。