2012-02-03 60 views
1

看起来像一个非常简单的问题!但我很困难。如何为大型UIScrollView设置背景图案(即与视图滚动)

我的想法和尝试至今:

  1. scrollView.backgroundColor = [UIColor colorWithPatternImage:myImage]]
    • 不与内容滚动
  2. 创建UIViewcontentSize(实际尺寸,由于大以滚动视图上的弹性反弹),并使用上面的o模式在UIScrollView的这个子视图中。
  3. 到类似的(2),exept我只创建一个UIView的背景图像的重复,将可以看出的最大数量的大小,并且巧妙地移动视图,以在任何需要的以显示正确的背景重复。
    • 导致此背景视图在动画滚动时出乎意料地左右移动。
  4. 创建UIView子类并覆盖drawRect。使用各种核心图形技术手动绘制内容。
    • 不具动画性。实现我自己的contentOffset属性不是标准的核心动画属性。
    • UIScrollView重写drawRect不尊重内容偏移量,因为它滚动/动画不会被调用多次。 rect参数始终是简单的UIScrollView的界限。
  5. 与(4),除了设置我UIView子类的bounds.origin在我setContentOffset实现,因为它是一个动画属性。
    • drawRect似乎并没有被调用每一帧。
  6. 使用CATiledLayer,如建议在这个答案:Large UIScrollView with background pattern fails。这里的实现细节:http://www.cimgf.com/2011/03/01/subduing-catiledlayer/
    • 我真的不希望看到瓷砖异步绘制为用户滚动的丑陋。这只是一个简单的背景图案!

这似乎是最简单的事情!为什么这么难!

回答

1

也许示例代码:ScollViewSuit-> 3_Tiling可以帮助你。您可以在官方docset中搜索它。

它的工作方式与CATiledLayer类似,但只能使用UIKit,该tile已加载到主线程中。

我真的不认为这是一个好的解决方案。

+0

谢谢郭。我认为这看起来像迄今为止最好的答案。我想知道是否有可能使这个工作没有任何淡入淡出的问题?如果是这样,我可能会全力以赴,并利用我正在使用这项技术的事实,并且创造一个巨大的平铺背景 - 将它变成一个真实的特征! – 2012-02-04 00:05:27

+0

啊,对不起,没有意识到他们的平铺示例不使用'CATiledLayer',而是使用多个'UIImageViews'想想我可能会给技术去... – 2012-02-04 11:23:40

+0

好吧,标记为正确的解决方案,因为我决定去尽管远非简单! – 2012-02-05 20:47:37