将 iCarousel 与文件夹中的图像一起使用

Posted

技术标签:

【中文标题】将 iCarousel 与文件夹中的图像一起使用【英文标题】:Using iCarousel with images in folder 【发布时间】:2014-07-02 12:42:18 【问题描述】:

我有一个文件夹(文档/图像),用于存储从在线下载的图像,当启动带有 iCarsousel 的视图时,还会发送有关要使用的图像的信息,因此只会使用该文件夹中的某些图像。 但是由于某种原因,下面的代码似乎不起作用,并且显示了一个空白视图并且没有给出错误消息。

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel

    [carousel setType:iCarouselTypeCylinder];


    [self getImages];
    return [images count];


- (void)getImages
    images=[[NSMutableArray alloc]init];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:databaseName];
    db = [FMDatabase databaseWithPath:writableDBPath];
    if (![db open]) 
        return;
    
    NSLog(@"getting images");
    NSLog(_galleryid);
    FMResultSet *result = [db executeQuery:@"SELECT * FROM mediaImages WHERE galleryID = ?;", _galleryid];
    while ([result next])

        NSString *filename = [result stringForColumnIndex:1];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSFileManager *fileManager  = [NSFileManager defaultManager];

        //configure carousel
        NSString *fPath = [documentsDirectory stringByAppendingPathComponent:@"Images"];

        NSString *filepath = [fPath stringByAppendingString:@"/"];
        filepath = [filepath stringByAppendingString:filename];
        NSLog(filepath);
        [images addObject:filepath];
    


- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view

    view = [[UIView alloc] init];
    view.contentMode = UIViewContentModeScaleAspectFit;
    CGRect rec = view.frame;
    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)
    
        rec.size.width = 250;
        rec.size.height = 250;
    
    view.frame = rec;
    UIImageView *iv;
    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)
    
        iv=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
    
    NSString *temp=[images objectAtIndex:index];
    iv.image=[UIImage imageNamed:temp];
    iv.contentMode = UIViewContentModeScaleAspectFit;
    [view addSubview:iv];
    return view;


- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index

    NSLog(@"Image is selected.");


- (CGFloat)carousel:(iCarousel *)carousel valueForOption:(iCarouselOption)option withDefault:(CGFloat)value

    switch (option)
    
        case iCarouselOptionWrap:
        
            return YES;
        
        default:
        
            return value;
        
    

代码有什么明显的错误,或者是调试问题所在的好方法吗?

【问题讨论】:

您可以从隔离问题开始,看看它是否在您的getImages 逻辑中(即images 填充是否正确)。您可以为此添加日志记录或调试器。您可能还会发现这里的建议很有帮助:***.com/help/mcve 图像在 getImages 的末尾正确填充,每个图像的完整路径 你用的是什么设备? 【参考方案1】:

我的猜测是问题出在这里:

iv.image=[UIImage imageNamed:temp];

temp 是文件的路径,而不是图像的名称,所以这不起作用。也许您想改用+ imageWithContentsOfFile:

如果这不是唯一的问题,我强烈建议您尝试通过日志记录或调试进一步隔离它;例如,如果您记录了temp 的值和从imageNamed: 返回的图像,您可能也会看到这个问题。

【讨论】:

以上是关于将 iCarousel 与文件夹中的图像一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使 iCarousel 与 UITableViewController 中的 headerView 一起工作

如何将图像从相机/UIImagePickerController 动态添加到 iPhone 中的 iCarousel

如何删除 iCarousel 中的重复项

iCarousel - 如何将焦点转移到左侧

iCarousel 重复图像

在 iCarousel 中调整项目的大小和动画