跨越多个UITableViewCells的背景图像(分组)

时间:2012-07-15 20:48:44

标签: iphone ios uitableview background

我正在使用带有一些自定义单元格的分组tableview,以及每个单元格的backgroundColor的图像。

cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"custombackground.png"]];

到目前为止,一切都很好,但我的图像明显高于普通单元格的高度,因此,只有图像的顶部用作背景,每个单元格都相同。基本上,它看起来很邋with,每个细胞重复模式。

有没有人这样做,所以该部分的第二行显示图像的下一部分而不是重复它,所以它看起来像一个连续的图像? (例如,第0行使用图像的前44位,第1行使用第45-88页,等等。)

是否有可能,和/或任何想法如何?

2 个答案:

答案 0 :(得分:1)

是的,你可以这样做。这个问题的关键是使用UIImage的CGImage方法,然后使用Quartz“CGImageRef CGImageCreateWithImageInRect();”创建子图像。使用CGImageRef,您可以创建新的UIImages。

让我们说它只是问题的高度。第一个单元格使用自上而下“h”像素的部分图像。然后下一个从“h”开始,再到另一个像素等等。

请注意,Quartz使用“翻转”坐标系,因此您必须精确地摆弄从中获取子图像的位置。当我这样做时,我似乎总是需要一些调整,所以期望在最后花一点时间让它正确显示。

答案 1 :(得分:0)

您可以通过indexPath.row变量计算每一行的部分大小。之后,使用您计算的CGRect值裁剪图像。

CGFloat top = (indexPath.row == 0) ? 0 : (indexPath.row * 44) + 1;

CGRectMake(0, top, 320, 44);是裁剪图片的矩形

您可以使用this个答案裁剪UIImage。

OP编辑:谢谢!从建议中添加我想出的内容:

    UIImage *image = [UIImage imageNamed:@"custombackground.png"];
    CGFloat y = indexPath.row * 44;

    for (y; y+44 > image.size.height; y -= image.size.height);
    //Sends our y origin back to the top of the image in case
    //the image would have ended in the middle of a cell, so 
    //it can be used for any length of table.

    CGRect cropRect = CGRectMake(0, y, 320, 44);
    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect);

    cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithCGImage:imageRef]];