загружать изображения в ikimagebrowser из папки?

Я новичок в какао, и у меня есть IKImageBrowserView, и вот как я загружаю в него изображения:

- (IBAction)loadImages:(id)sender
{
NSMutableArray *urls = [[NSMutableArray alloc]init];
int i = 1;
for (i=1; i<55; i++) {
    NSString *photoNumber = [NSString stringWithFormat:@"%i", i];
    NSMutableString *urlString = [[NSMutableString alloc] initWithString:@"Australia"];
    [urlString appendString:photoNumber];
    NSURL* url = [[NSBundle mainBundle] URLForImageResource:urlString];
    [urls addObject:url];
}
[self addImagesWithPaths:urls];
}

    - (void)addAnImageWithPath:(NSString *)path
{
    myImageObject *p;

/* add a path to our temporary array */
p = [[myImageObject alloc] init];
[p setPath:path];
[_importedImages addObject:p];
}

- (void)addImagesWithPath:(NSString *)path recursive:(BOOL)recursive
{
NSInteger i, n;
BOOL dir;

[[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&dir];

if (dir)
{
    NSArray *content = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];

    n = [content count];

    // parse the directory content
    for (i=0; i<n; i++)
    {
        if (recursive)
            [self addImagesWithPath:[path stringByAppendingPathComponent:[content objectAtIndex:i]] recursive:YES];
        else
            [self addAnImageWithPath:[path stringByAppendingPathComponent:[content objectAtIndex:i]]];
    }
}
else
{
    [self addAnImageWithPath:path];
}
}

/* performed in an independant thread, parse all paths in "paths" and add these paths in our    temporary array */
- (void)addImagesWithPaths:(NSArray *)urls
{
    NSInteger i, n;

n = [urls count];
for ( i= 0; i < n; i++)
{
    NSURL *url = [urls objectAtIndex:i];
    [self addImagesWithPath:[url path] recursive:NO];
}

/* update the datasource in the main thread */
[self performSelectorOnMainThread:@selector(updateDatasource) withObject:nil waitUntilDone:YES];
}

Теперь мои изображения загружаются по имени - @"Австралия". Это неудобно, так как ваши изображения должны иметь одинаковое имя и номер. Как загрузить изображения с разными именами из папки, которая была импортирована в xcode?

Итак, на данный момент я загружаю изображения по имени Австралия1, Австралия2, Австралия3, Австралия4... и так далее. Как загрузить изображения из папки пакета?


person Rokas    schedule 14.01.2013    source источник
comment
Я не знаю, почему вы пометили это как iOS. Cocoa и Image Kit доступны только в OS X.   -  person Peter Hosey    schedule 15.01.2013
comment
Непонятно, что вы пытаетесь сделать или что вместо этого происходит. Что вы подразумеваете под «мои изображения загружаются по имени — @Австралия»? Что вы подразумеваете под «ваши изображения должны иметь одинаковое имя и номер»? Чем «загрузка изображений с разными именами из папки» отличается от того, что вы делаете здесь?   -  person Peter Hosey    schedule 15.01.2013
comment
Я не думаю, что пометил его как какао... Ну, во всяком случае, на данный момент мои изображения загружаются в цикле по имени, поэтому я получил изображения с именами Австралия1, Австралия2, Австралия3... и так далее. Как загрузить изображения из папки пакета?   -  person Rokas    schedule 15.01.2013


Ответы (1)


Ваш источник данных должен возвращать элементы в представление браузера изображений, соответствующие протоколу IKImageBrowserItem. Ваш класс myImageObject — хорошее место для начала.

В этом протоколе требуются три метода:

Для начала я бы просто использовал путь, который вы уже указываете для каждого объекта myImageObject. Вы можете использовать это как строку идентификатора, так и представление изображения.

В зависимости от того, что еще вы делаете в этом приложении, вы можете позже счесть выгодным из соображений памяти и/или скорости загружать каждое изображение самостоятельно. Если после профилирования вы пришли к такому выводу, вы можете загрузить изображение самостоятельно как NSImage или CGImage, соответствующим образом изменить тип представления и вернуть изображение в качестве представления.

В качестве источника данных вы вернете количество элементов в массиве _importedImages, а при запросе элемент по индексу, вернуть этот элемент через objectAtIndex:.

Больше информации:

person Peter Hosey    schedule 15.01.2013
comment
У меня уже есть группа NSImages в массиве. Что я использую для требований протокола источника данных? Спасибо - person ICL1901; 29.09.2013
comment
Забыл сказать - это картинки скачанные из сети прямо в изменяемый массив. - person ICL1901; 29.09.2013
comment
@DavidDelMonte: создайте класс, соответствующий протоколу, и заверните каждое изображение в его экземпляр. - person Peter Hosey; 29.09.2013
comment
Спасибо. Я учусь .. Я сделал класс (MyImageObject. Мне просто нужно понять, как обернуть в него изображения. - person ICL1901; 29.09.2013
comment
@DavidDelMonte: В создании обертки нет ничего особенного. Оболочка — это просто объект, который содержит объект и обеспечивает другие функции (например, элемент браузера) от его имени. Все, что вам нужно сделать, это создать свойство для хранения изображения, а затем реализовать протокол. - person Peter Hosey; 30.09.2013