图像并排放在数组xcode中(在UITableViewCell中)

时间:2011-10-31 16:43:15

标签: iphone ios xcode uitableview uiimageview

我有一组图片(最多可以是25张)需要并排(他们是访问图标,告诉我们某个位置有什么设施)

我有一个数组中的图像,并在UITableViewCell中使用UIImageView。 (在尝试数组之前,我正在练习静态图像)。但是,它们相互重叠。有没有办法强制图像在前一个图像的右边,而不是每次正确填充+60像素:

if (indexPath.section == 0)
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierImage];
        // I am assuming this image never changes and there is one row in this section! If it does change, use viewWithTag to get hold of the image view.
        if (cell == nil) 
        {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifierImage] autorelease];
            UIImageView *imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0,0,50,50)]autorelease];
            imageView.tag = 1;
            imageView.image = [UIImage imageNamed:@"prem.jpg"];

            [cell addSubview:imageView];

            UIImageView *imageView2 = [[[UIImageView alloc] initWithFrame:CGRectMake(60,0,50,50)]autorelease];
            imageView2.tag = 2;
            imageView2.image = [UIImage imageNamed:@"prem.jpg"];

            [cell addSubview:imageView2];

        }
        return cell;

    }

以上适用于两个图像,但它不是很优雅,并且在超过25个潜在图像(每次图像数量也发生变化)时都显得很傻。

任何提示都会非常感激。

汤姆

4 个答案:

答案 0 :(得分:1)

根据ivar整数值创建rects,并将其放入for循环中,每次循环时都会增加xpos ivar。

答案 1 :(得分:1)

答案 2 :(得分:1)

为什么不使用UIScrollView?如果我需要并排放置图像,我只需在UIScrollView上执行此操作。代码看起来像这样

//Let's say your UIScrollView is named 'scrollView' and the array containing your UIImages is called 'imageArray'

CGFloat contentWidth = 0;

for(UIImage *thisImage in imageArray)
{
    UIImageView *thisImageView = [[UIImageView alloc] initWithFrame:CGRectMake([imageArray indexOfObject:thisImage]*(thisImage.size.width + PADDING_IF_ANY), 0, thisImage.size.width, thisImage.size.height)];
    [scrollView addSubview:thisImageView];
    [thisImageView release];

    contentWidth += thisImage.size.width + ([imageArray indexOfObject:thisImage]==0)?0:PADDING_IF_ANY;
}

scrollView.contentSize = CGSizeMake(contentWidth, scrollView.frame.size.height);

代码说明:

PADDING_IF_ANY表示两个图像之间所需的像素填充。代码只是一个循环遍历UIImage数组的for循环,为每个图像分配一个UIImageView,并根据数组中UIImage的索引位置设置X-origin。

因此,索引位置0将放置在滚动视图的最左侧位置。索引位置1将放置在1 *(图像宽度+填充),即滚动视图中上一个图像的右侧,依此类推。

要在UITableViewCell中使用scrollView,请在cellForRowAtIndexPath中执行此操作:

//This line gets you the frame of the cell relative to the tableview.
CGRect cellFrame = [tableView rectForRowAtIndexPath:indexPath];

//Set the Y origin to 0. This will get you the frame for the scrollView to be added with to the cell.
cellFrame.origin.y = 0;

//Now add your scrollView
scrollView = [[UIScrollView alloc] initWithFrame:cellFrame];
/*
Do stuff
*/
[cell.contentView addSubview:scrollView];
[scrollView release];

答案 3 :(得分:-1)

我认为您需要更改此行

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];

我知道这可能会增加内存但是没有其他解决方案,或者只是使用scrollview。