繁体   English   中英

UITableView背景为平铺图像

[英]UITableView background as tiled image

我的iPhone上的图像高度约为1,5。 我想把它作为UITableView的连续背景。 它必须滚动表。 有什么办法吗?

您可以将此图像转换为可以无限重复的图案作为表格视图的背景。 首先,这样做:

UIColor *backgroundPatternColor = [UIColor colorWithPatternImage:myImage];

然后将表视图的背景颜色或任何其他视图的背景颜色设置为backgroundPatternColor

有简单的解决方案。

使用此代码为表格视图设置背景图案图像(图案图像可能是您想要平铺的小图像):

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"back"]];
}

平铺图像将向上和向下无限平铺,并使用tableView滚动。

然后做下一个重要的技巧 - 为单元格设置透明背景颜色,因为设置tableView backgroundColor也会将平铺背景设置为单元格:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor clearColor];
}

对简单的tableView单元使用此方法,否则复杂单元的透明背景会导致性能不足。

表格视图滚动在很大程度上是一种错觉,因为当用户滑动/滚动表单元格时,表格单元格在未被使用时排队并且当再次需要新单元格时将其出列。 我们经常将此称为跑步机效果,您在屏幕上看到的就像跑步机的腰带。 它仅存在于视口中,并且实际上不会滚动得更远,尽管它看起来不然。 这意味着您的表格视图的背景图像将固定到位,而不是与您的单元格一起滚动。

我认为,在你的单元格中滚动图像的唯一方法就是将图像分解成单元格的大小,并将每个单元格的背景设置为该索引路径的图像。

所以说你有一个像这样的表视图:

         CELLS            INDEX PATH
|----------------------|
|          |           |  0, 0
|----------------------|
|        /   \         |  0, 1
|----------------------|
|      YOUR IMAGE      |  0, 2
|----------------------|
|        HERE          |  0, 3
|----------------------|
|        \   /         |  0, 4
|----------------------|

将图像预先切割成相同尺寸的部分,这些部分是细胞的正确高度。 然后,您可以在cellForRowAtIndexPath获取索引路径的行,并根据该行设置单元格的背景图像。 如果您的图像高度超过图像高度,则最终可能会耗尽图像,但是,这很容易检查。

如果您将图像命名为background_0.png,background_1.png等,则可以获取所需的图像,如下所示:

UIImage *imageForCell = [UIImage imageNamed:[NSString stringWithFormat:@"background_%d", [indexPath row]]];
[[cell backgroundImageView] setImage:imageForCell];

其中backgroundImageView是您添加到自定义单元格的图像视图。

您要求为您的桌子设置平铺的滚动背景。 通常用于在tile中滚动的东西的UI是一个表。 所以用一张桌子作为你的背景:)

您需要两个表:backgroundTableView和contentTableView。 contentTableView是您需要的任何内容,但请确保将单元格和表格的背景颜色和视图设置为clear / nil。

backgroundTableView包含您的平铺图像:也就是说,每个单元格应该是平铺图像的高度,并且应该包含平铺图像。

然后滚动contentTableView时,更新backgroundTableView的contentOffset以匹配:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    if (scrollView == self.contentTableView) {
        self.backgroundTableView.contentOffset = self.contentTableView.contentOffset;
    }
}

确保将控制器设置为两个表的dataSource和委托。 此外,请确保backgroundTableView中有足够的“内容”(行数*高度),它可以继续滚动,直到至少在contentTableView的末尾。

Aaaaaand完成了!

UITableView继承自UIScrollView。 我建议您将图像添加为UITableView层次结构的自定义子视图。

UIImageView *imageView = [UIImageView alloc] initWithImage:myImage];
[self.tableView insertSubview:imageView atIndex:0];

现在,您可能需要继承UITableView并提供自己的实现

    - (void)layoutSubviews
{
    [super layoutSubviews];
    [self sendSubviewToBack:myImageView];
}

我只是把这个代码从头顶拉出来,所以你可能需要摆弄它。

您可以将图像设置为表格的背景视图。

self.tableView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YOUR_BACKGROUND_IMAGE"]];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM