如何在UIScrollView中使用非滚动内容

时间:2012-01-17 09:02:35

标签: view background uiscrollview scroll hierarchy

我需要这样的东西

+ scrollview
|
|__ moving content
|
|__ non moving content

棘手的部分是我正在修改现有的代码,我无法使用 scrollview parent将“非移动内容”设置为它的子级。不动的内容 必须是一个scrollview孩子。我想把它附加到背景视图但是 我不知道如何访问UIScrollview的背景视图。

1 个答案:

答案 0 :(得分:3)

我认为“推荐”的方法是在自定义UIScrollView子类中覆盖layoutSubviews。如果您是开发人员计划成员,您应该在2010 WWDC会议中讨论(IIRC)。

假设您无法继承UIScrollView(鉴于您对修改现有代码的限制),您可以执行以下操作。

让“staticView”成为您想要修复的“非移动内容”:

UIView *staticView;

创建一个ivar(可能在您的视图控制器中)以保存其初始中心:

CGPoint staticViewDefaultCenter = [staticView center]; // Say, in viewDidLoad

将视图控制器设置为滚动视图的委托(如果尚未执行),然后执行以下操作:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint contentOffset = [scrollView contentOffset];
    CGPoint newCenter = CGPointMake(staticViewDefaultCenter.x + contentOffset.x,
                                    staticViewDefaultCenter.y + contentOffset.y);
    [staticView setCenter:newCenter];
 }

这将涵盖可滚动视图的简单情况。处理可缩放视图会变得有点棘手,部分取决于你如何实现viewForZoomingInScrollView:方法,但是遵循一个类似的过程(这次是在scrollViewDidZoom中:当然)。

我没有想过在你的staticView上进行转换的含义 - 在这种情况下你可能不得不做一些操作。