【问题标题】:Background Image Spanning Across Multiple UITableViewCells (Grouped)跨越多个 UITableViewCells 的背景图像(分组)
【发布时间】:2023-03-25 12:17:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: iphone ios uitableview background


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢大卫!我很欣赏它背后的理论。
    【解决方案2】:

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

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

    CGRectMake(0, top, 320, 44); 是您用于裁剪图像的矩形

    您可以使用this 答案来裁剪 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]];
    

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多