1

NSCollectionView에 디스크에 처음 저장하지 않고도 NSImages를 추가 할 수 있습니다. 이미지는 NSMutableArray에서 콜렉션 뷰로 공급됩니다. 이렇게하면 사람들은 먼저 이미지를 저장할 필요없이 이미지를 볼 수 있습니다.IKimagerowserview에 NSImage 추가

IKImageBrowserView로 구현할 수있는 유사한 기능이 있습니까? NSCollectionView는 이미지를 표현할 때 작동하지만, IKImageBrowserView와 비슷한 것을 할 수 있는지 알고 싶습니다.

디스크에 저장된 이미지로 Apple IKImageBrowserView를 쉽게 구현할 수 있지만 (Apple docs는 어떻게 작동합니까?) 처음 저장하는 대신 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]; 
} 

여기 Nmapmages를 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 메소드를 호출하는 간단한 요구 사항을 간과했다.

+0

몇 가지 노력을 보여 주면 도와 드리겠습니다. 모든 검색 결과를 탐색 해 보시기 바랍니다. 한 달 전에 IKImageBrowserView를 처음 사용하려고했을 때 그랬습니다. –

+0

@TBlue 업데이트 된 질문. –

답변

1

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; 
} 

위의 임의의 정수 생성기 (genRandom)를 사용할 필요는 없지만 동일한 imageID가 없는지 확인하십시오.

This web site에는 샘플 프로젝트가있어서 도움이 될 것입니다. (나는 제휴 관계가 없습니다.) 그래서 당신이 그것을 다운로드하고 실행했는지 확인하십시오. 그런 다음 자세히 살펴보고 필요에 맞게 개선하십시오.