0

我是可可新手,我有一个 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];
}

现在我的图像按名称加载 - @“Australia”。这有点不方便,因为您的图像需要具有相同的名称和编号。如何从已导入 xcode 的文件夹中加载具有不同名称的图像?

所以目前我正在加载名为 Australia1、Australia2、Australia3、Australia4 的图像……等等。如何从捆绑文件夹中加载图像?

4

1 回答 1

1

您的数据源需要将符合IKImageBrowserItem协议的项目返回到图像浏览器视图。您的 myImageObject 类是一个很好的起点。

在该协议中,需要三种方法:

首先,我将使用您已经为每个 myImageObject 提供的路径。您可以将其用作标识符字符串和图像表示。

根据您在此应用程序中执行的其他操作,您可能会发现以后出于内存和/或速度原因自行加载每个图像是有利的。如果在分析之后,您确实得出了这个结论,您可以自己将图像加载为 NSImage 或 CGImage,适当地更改表示类型,然后将图像作为表示返回。

作为数据源,您将返回数组中的项目数,并且当在索引处_importedImages询问项目时,通过.objectAtIndex:

更多信息:

于 2013-01-15T01:56:23.693 回答