1

我想要的是一个 UIScrollView,它有一个重复的平铺图像作为背景。

这个问题的明显答案如下:

myScrollView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myRepeatingImage.png"]];

然而,这个解决方案有很多问题......

  1. 性能很糟糕。
  2. 它不能正确缩放。

我的下一个想法是向 myScrollView 添加一个 UIView(我们将其称为 backgroundView),并将重复图像作为背景色,并将所有子视图添加到 backgroundView。但是,如果不断调整 backgroundView 的大小,这可能会变得非常混乱,这样当用户缩小时(即使是暂时超出最小缩放级别),您也无法看到 backgroundView 的“周围”。

有什么建议么?

与此问题类似,但问题未得到解答, UIScrollView 以图案图像为背景

4

2 回答 2

1

我想这就是你想要做的。

将一些 (z) 的 UIImageView 作为背景。将这些提取到单独的控件中,因此您只需添加一个“背景视图”。假设您要向上、向下、向左和向右滚动。您还希望缩小内容大小。因此,您需要 x 数量的图像来覆盖滚动视图的宽度,并需要 s 图像来缓冲缩放时的宽度。(y 表示覆盖高度,t 表示缓冲高度,因此 z = x + r + y + t)

旁注:当我说缓冲宽度时,我的意思是将图像放在位于内容大小范围之外的原点。这样,当缩小内容范围时,您将看到这些图像,而不是“围绕”背景。

当您向右滚动足够的距离时(基于与滚动视图边界相关的图像大小,或可见框架是什么),然后将现在不可见的图像视图移动到最右侧的图像视图的右侧。对左右滚动执行类似的操作。发生缩放时,您可能需要添加/删除图像视图......或者只使用始终需要的最大图像视图数量。

关键是提高性能,因此理想情况下,您使用的图像视图数量很少。该数字与 sizeof(scrollview.bounds)/sizeof(image) 成比例增加。sizeof 自然表示帧大小,而不是字节。

编辑:为了帮助说明这个概念,我们可以做以下类比。滚动视图是查看部分瓷砖地板的镜头,滚动视图的内容背景是瓷砖地板。但是,我们只使用了基于镜头的足够数量的图块。随着镜头的移动,我们将不可见的瓷砖移动到镜头将移动到的区域。随着镜头的缩小,我们添加了瓷砖(如果在我们放大时移除它们)。我希望这有助于澄清事情,而不是让事情变得更加混乱。

于 2012-10-05T18:07:12.657 回答
0

这对我有用:

scrollView.backgroundColor = UIColor.init(patternImage: UIImage(named: "repeatable paper background" )! )

希望这能帮助找到这个的人,这些年后!

于 2016-02-29T05:57:15.560 回答