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

Iphone 跨越多个UITableViewCell的背景图像(分组),iphone,ios,uitableview,background,Iphone,Ios,Uitableview,Background,我正在使用一个带有一些自定义单元格的分组表视图,并使用一个图像作为每个单元格的背景色 cell.backgroundColor=[uicolorWithPatternImage:[UIImage ImageName:@“custombackground.png”] 到目前为止,一切都很好,但我的图像明显高于常规单元格的高度,因此,只有图像的顶部用作背景,每个单元格都是相同的。基本上,它看起来很松散,每个单元格都重复该模式 有人这样做过吗?这样分区的第二行显示图像的下一部分,而不是重复它,所以它看

我正在使用一个带有一些自定义单元格的分组表视图,并使用一个图像作为每个单元格的背景色

cell.backgroundColor=[uicolorWithPatternImage:[UIImage ImageName:@“custombackground.png”]

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

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


有没有可能,和/或如何计算的想法?

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

CGFloat top = (indexPath.row == 0) ? 0 : (indexPath.row * 44) + 1;
CGRectMake(0,top,320,44)是裁剪图像的矩形

您可以使用答案裁剪UIImage。

编辑:谢谢!添加我从建议中得出的结论:

    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]];

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

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


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

谢谢David!我欣赏它背后的理论。