Objective c 将NSImage添加到IKimagerowserview
我可以将NSIMAGE添加到我的NSCollectionView,而无需先将其保存在磁盘上。图像从NSMutableArray馈送到集合视图。这样人们就可以看到图像,而不必先保存它们 我是否可以通过iImageBrowserView实现类似的功能?NcollectionView在表示图像时很有用,但我想看看我是否可以用IKImageBrowserView做类似的事情 我可以使用保存在磁盘上的图像轻松实现IKImageBrowserView(Apple文档介绍了这一过程),但我无法准确地确定要查看的位置,或者如何直接从NSMUTABLEARRY将图像添加到浏览器视图,而不是先将图像保存到磁盘 我在这里不知所措。除了这些文件,我真的不确定还有什么地方可以找到方向。或者说我想做的事该怎么称呼 编辑:(这里是一些代码) //数据对象——如果可以表示图像对象,这可能就是我出错的地方Objective c 将NSImage添加到IKimagerowserview,objective-c,macos,nsmutablearray,nsimage,ikimagebrowserview,Objective C,Macos,Nsmutablearray,Nsimage,Ikimagebrowserview,我可以将NSIMAGE添加到我的NSCollectionView,而无需先将其保存在磁盘上。图像从NSMutableArray馈送到集合视图。这样人们就可以看到图像,而不必先保存它们 我是否可以通过iImageBrowserView实现类似的功能?NcollectionView在表示图像时很有用,但我想看看我是否可以用IKImageBrowserView做类似的事情 我可以使用保存在磁盘上的图像轻松实现IKImageBrowserView(Apple文档介绍了这一过程),但我无法准确地确定要查看
@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蓝色更新了问题。