在1个单元格内绘制6个图像视图

时间:2012-10-10 10:11:52

标签: iphone objective-c core-data uitableview

我有一个非常讨厌的问题。我想要做的是将6个图像视图绘制到一个单元格中。在以下屏幕上,您可以看到我想要实现的目标。

这就是我在cellForRowAtIndexPath中所做的事情

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    for(int i=0;i<5;i++)
    {
        float xCoord = 30.0;
        Team *team = [self.fetchedResultsController objectAtIndexPath:indexPath];
        NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:team.image]];
        UIImage* image = [[UIImage alloc] initWithData:imageData];
        UIImageView* imgView = [[UIImageView alloc] initWithImage:image];
        [imgView setFrame:CGRectMake(xCoord,0,66,66)];
        [cell.contentView addSubview:imgView];
        xCoord += imgView.frame.size.width + 5;
        NSLog(@"%f",xCoord);
        [cell.contentView clearsContextBeforeDrawing];
    }


    return cell;
}

有人能帮助我吗?

3 个答案:

答案 0 :(得分:2)

即使您在计算每次迭代中重置为30的x坐标修复错误之后,您仍然会遇到重复使用单元格的问题:您的程序会向单元格添加新的UIImageView s ,即使它已经包含五个UIImageView个对象。经过几轮重复使用后,单元格会有几十个图像相互叠加,对性能产生灾难性影响 - 特别是滚动性能。

你应该定义UITableViewCell的自定义子类,其中六个UIImageView个对象被添加为子视图,给它一个像这样的方法

-(void)setImage:(UIImage*)image forPosition:(NSUInteger)position;

并在循环中调用此方法(如果你想要六个图像,循环应该有i <= 5,而不是i < 5作为其结束条件。)

编辑:以下是一种过于简化的编码方式:

CustomCell.h:

#define NUM_PICS 6

@interface SixPicsCell : UITableViewCell {
    UIImageView *pics[NUM_PICS];
}
-(void)setImage:(UIImage*)image forPosition:(NSUInteger)position;
- (id)initWithStyle:(UITableViewCellStyle)style
    reuseIdentifier:(NSString *)reuseIdentifier
@end

CustomCell.m:

- (id)initWithStyle:(UITableViewCellStyle)style
    reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        for (int i = 0 ; i != NUM_PICS ; i++) {
            pics[i] = [[UIImageView alloc] initWithImage:nil];
            [pics[i] setFrame:CGRectMake(30+71*i, 0, 66, 66)];
            [self.contentView addSubview:pics[i]];
        }
    }
    return self;
}

-(void)setImage:(UIImage*)image forPosition:(NSUInteger)position {
    pics[position].image = image;
}

答案 1 :(得分:0)

大声笑,我之前已经回答了这个问题。

(到目前为止)最简单的方法是使用UICollectionView(但是想要推出到iOS 5的IIRC)。

要解决重用和内存的问题(并且还可以在每一行中拥有无限的条目),您可以使用包含自己的UITableView(旋转90度)的自定义cUITableViewCell。然后,这可以显示任意数量的图像,因为每个图像再次位于其自己的单元格内。

这听起来很复杂,但如果你把它分解,那真的不是。

答案 2 :(得分:0)

这是网格视图的一种情况..

尝试以下内容供您参考

int rows  = 5;
int columns = 4 //

for (int j=0; j<rows; j++) {

    int xPos=0;
    for (int i=0; i<columns; i++) {

         UIImageView *backImg=[[UIImageView alloc]initWithFrame:CGRectMake(3+xPos,3+yPos, 104, 140)];
        [backImg setImage:[UIImage imageNamed:@"your image.png"]];
        [backImg setBackgroundColor:[UIColor clearColor]];
          [cell.contentView addSubView:backImg];               

        xPos+=105;



    }//columns end
    yPos +=140;

}//rows end