2012-07-15 153 views
3

我用一些自定义单元格和一个图像作为每个单元格的backgroundColor使用分组tableview。跨越多个UITableViewCells(分组)的跨越背景图像

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

到目前为止,一切都很好,但我的形象是比普通细胞的高度显著较高,因此,只有图像的上半部分被用作背景,而且每个细胞是相同的。基本上,每个细胞重复这种模式看起来很sl sl。

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

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

回答

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

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

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

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

+0

谢谢大卫!我赞赏它背后的理论。 – 2012-07-15 21:52:41