Objective c 将NSImage添加到IKimagerowserview

Objective c 将NSImage添加到IKimagerowserview,objective-c,macos,nsmutablearray,nsimage,ikimagebrowserview,Objective C,Macos,Nsmutablearray,Nsimage,Ikimagebrowserview,我可以将NSIMAGE添加到我的NSCollectionView,而无需先将其保存在磁盘上。图像从NSMutableArray馈送到集合视图。这样人们就可以看到图像,而不必先保存它们 我是否可以通过iImageBrowserView实现类似的功能?NcollectionView在表示图像时很有用,但我想看看我是否可以用IKImageBrowserView做类似的事情 我可以使用保存在磁盘上的图像轻松实现IKImageBrowserView(Apple文档介绍了这一过程),但我无法准确地确定要查看

我可以将NSIMAGE添加到我的NSCollectionView,而无需先将其保存在磁盘上。图像从NSMutableArray馈送到集合视图。这样人们就可以看到图像,而不必先保存它们

我是否可以通过iImageBrowserView实现类似的功能?NcollectionView在表示图像时很有用,但我想看看我是否可以用IKImageBrowserView做类似的事情

我可以使用保存在磁盘上的图像轻松实现IKImageBrowserView(Apple文档介绍了这一过程),但我无法准确地确定要查看的位置,或者如何直接从NSMUTABLEARRY将图像添加到浏览器视图,而不是先将图像保存到磁盘

我在这里不知所措。除了这些文件,我真的不确定还有什么地方可以找到方向。或者说我想做的事该怎么称呼

编辑:(这里是一些代码)

//数据对象——如果可以表示图像对象,这可能就是我出错的地方

@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];
}
这是我尝试向browserView添加nsImage的地方,但什么也没发生。数组被填充(这意味着生成的图像没有任何错误),但屏幕上什么也没有发生

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方法的要求。

使用IKImageBrowser最重要的一点是为每个元素创建一个唯一的图像ID。下面是一个例子。事实上,它来自我目前正在进行的项目。我刚刚在其中实现了IKImageBrowser。下面的代码假设有36个图像(Image01.png、Image02.png…、Image36.png)导入到项目中

// .h
@interface AppDelegate : NSObject {
    IBOutlet IKImageBrowserView *browserView;
    NSMutableArray *imageArray;
}

// .m
#import "IKBBrowserItem.h"
#import <QuartzCore/QuartzCore.h>

- (void)applicationWillFinishLaunching:(NSNotification *)notification {
    imageArray = [[NSMutableArray alloc]init];
}

- (void)populateImage {    
    for (NSInteger i2 = 1; i2 <= 36 ; i2++) {
        NSString *name;
        if (i2 < 10) {
            name = [NSString stringWithFormat:@"Image0%ld",(long)i2];
        } else {
            name = [NSString stringWithFormat:@"Image%ld",(long)i2];
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        NSImage *Image0 = [NSImage imageNamed:name];
        NSInteger ran = [self genRandom:1000000:9999999];
        NSString *imageID = [NSString stringWithFormat:@"%@%li",name,ran];
        IKBBrowserItem *item = [[IKBBrowserItem alloc] initWithImage:Image0 imageID:imageID:name];
        [imageArray addObject:item];
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }

    [browserView reloadData];
}

- (NSInteger)genRandom: (NSInteger)min :(NSInteger)max {
    int num1;
    do {
        num1 = arc4random() % max;
    } while (num1 < min);
    return num1;
}
/.h
@接口AppDelegate:NSObject{
IBIKIMAGEBROWSERVIEW*browserView;
NSMutableArray*imageArray;
}
//m
#导入“IKBBrowserItem.h”
#进口
-(无效)应用程序将完成启动:(NSNotification*)通知{
imageArray=[[NSMutableArray alloc]init];
}
-(无效)大众形象{

对于(NSInteger i2=1;i2使用IKImageBrowser最重要的一点是为每个元素创建一个唯一的图像ID。下面是一个示例。事实上,它来自我当前正在处理的项目。我刚刚在其中实现了IKImageBrowser。下面的代码假设您有36个图像(Image01.png,Image02.png…,Image36.png)导入到项目中

// .h
@interface AppDelegate : NSObject {
    IBOutlet IKImageBrowserView *browserView;
    NSMutableArray *imageArray;
}

// .m
#import "IKBBrowserItem.h"
#import <QuartzCore/QuartzCore.h>

- (void)applicationWillFinishLaunching:(NSNotification *)notification {
    imageArray = [[NSMutableArray alloc]init];
}

- (void)populateImage {    
    for (NSInteger i2 = 1; i2 <= 36 ; i2++) {
        NSString *name;
        if (i2 < 10) {
            name = [NSString stringWithFormat:@"Image0%ld",(long)i2];
        } else {
            name = [NSString stringWithFormat:@"Image%ld",(long)i2];
        }
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        NSImage *Image0 = [NSImage imageNamed:name];
        NSInteger ran = [self genRandom:1000000:9999999];
        NSString *imageID = [NSString stringWithFormat:@"%@%li",name,ran];
        IKBBrowserItem *item = [[IKBBrowserItem alloc] initWithImage:Image0 imageID:imageID:name];
        [imageArray addObject:item];
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }

    [browserView reloadData];
}

- (NSInteger)genRandom: (NSInteger)min :(NSInteger)max {
    int num1;
    do {
        num1 = arc4random() % max;
    } while (num1 < min);
    return num1;
}
/.h
@接口AppDelegate:NSObject{
IBIKIMAGEBROWSERVIEW*browserView;
NSMutableArray*imageArray;
}
//m
#导入“IKBBrowserItem.h”
#进口
-(无效)应用程序将完成启动:(NSNotification*)通知{
imageArray=[[NSMutableArray alloc]init];
}
-(无效)大众形象{

对于(NSInteger i2=1;i2如果您表现出一些努力,我会帮助您。我建议您浏览所有搜索结果。这是我一个月前第一次尝试使用IKImag浏览器视图时所做的。@t蓝色更新的问题。如果您表现出一些努力,我会帮助您。我建议您浏览所有搜索结果。这是我第一次尝试使用IKImag时所做的eBrowserView一个月前。@t蓝色更新了问题。