ios - UIScrollView 重复背景

标签 ios uiscrollview

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

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

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

但是,这个解决方案有多个问题......

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

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

有什么建议吗?

类似这个问题,但是这个问题没有答案 UIScrollView with pattern image as background

最佳答案

我认为这就是您想要做的。

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

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

当你向右滚动足够的距离时(基于与 ScrollView 边界相关的图像大小,或者可见框架是什么),然后将现在不可见的 ImageView 移动到最右侧的右侧 ImageView 。为向左、向上和向下滚动做类似的事情。您可能需要在缩放时添加/删除 ImageView ……或者始终使用所需的最大 ImageView 数。

重点是提高性能,因此理想情况下,您使用的 ImageView 数量很少。该数字与 sizeof(scrollview.bounds)/sizeof(image) 成比例增加。 sizeof 自然意味着帧大小,而不是字节。

编辑: 为了帮助说明这个概念,我们可以做以下类比。 scrollview 是一个镜头,可以看到瓷砖地板的一部分,scrollview 的内容背景是瓷砖地板。但是,我们仅根据镜头使用了足够数量的图 block 。当镜头移动时,我们将不可见的瓷砖移动到镜头将移动到的区域。当镜头缩小时,我们添加图 block (如果在放大时移除它们)。我希望这有助于理清思路,而不是让它变得更加困惑。

关于ios - UIScrollView 重复背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749343/

相关文章:

ios - Jetbrains Rider、Xamarin IOS 在钥匙串(keychain)中找不到有效的 iOS 代码签名 key

ios - Swift:在工作日的特定时间安排本地通知

iphone - 手动滚动显示相同内容的两个 UICollectionView

ios - 在 UITableView 上设置最小内容大小

iphone - 如何使用scrollRectToVisible滚动到图像的中心?

ios - 关于 UIScrollView 和更改 UIView 所有权的一些帮助

android - Bluemix Cordova 应用程序在 iOS 复杂化过程中出现 Bitcode 错误

iPhone - 如何将构建配置更改为分发

iphone - iOS/Obj-C UIScrollView View 未正确添加

ios - 应用程序终止时执行后台任务