1
看起来像一个非常简单的问题!但我很困难。如何为大型UIScrollView设置背景图案(即与视图滚动)
我的想法和尝试至今:
scrollView.backgroundColor = [UIColor colorWithPatternImage:myImage]]
- 不与内容滚动
- 创建
UIView
的contentSize
(实际尺寸,由于大以滚动视图上的弹性反弹),并使用上面的o模式在UIScrollView
的这个子视图中。- 当UIView变得太大时,导致海量内存命中(和崩溃)。参见:Large UIScrollView with background pattern fails
- 到类似的(2),exept我只创建一个
UIView
的背景图像的重复,将可以看出的最大数量的大小,并且巧妙地移动视图,以在任何需要的以显示正确的背景重复。- 导致此背景视图在动画滚动时出乎意料地左右移动。
- 创建
UIView
子类并覆盖drawRect
。使用各种核心图形技术手动绘制内容。- 不具动画性。实现我自己的
contentOffset
属性不是标准的核心动画属性。 - 上
UIScrollView
重写drawRect
不尊重内容偏移量,因为它滚动/动画不会被调用多次。 rect参数始终是简单的UIScrollView
的界限。
- 不具动画性。实现我自己的
- 与(4),除了设置我
UIView
子类的bounds.origin
在我setContentOffset
实现,因为它是一个动画属性。drawRect
似乎并没有被调用每一帧。
- 使用
CATiledLayer
,如建议在这个答案:Large UIScrollView with background pattern fails。这里的实现细节:http://www.cimgf.com/2011/03/01/subduing-catiledlayer/。- 我真的不希望看到瓷砖异步绘制为用户滚动的丑陋。这只是一个简单的背景图案!
这似乎是最简单的事情!为什么这么难!
谢谢郭。我认为这看起来像迄今为止最好的答案。我想知道是否有可能使这个工作没有任何淡入淡出的问题?如果是这样,我可能会全力以赴,并利用我正在使用这项技术的事实,并且创造一个巨大的平铺背景 - 将它变成一个真实的特征! – 2012-02-04 00:05:27
啊,对不起,没有意识到他们的平铺示例不使用'CATiledLayer',而是使用多个'UIImageViews'想想我可能会给技术去... – 2012-02-04 11:23:40
好吧,标记为正确的解决方案,因为我决定去尽管远非简单! – 2012-02-05 20:47:37