2012-01-17 46 views
1

我需要的是这样的如何在一个UIScrollView非滚动内容

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

棘手的部分是我在修改现有的代码,我不能使用 父滚动视图设置“不移动的内容”,因为它是孩子。非移动内容 必须是滚动视图子项。我正在考虑将它附加到背景视图,但我不知道如何访问UIScrollview的背景视图。

回答

3

我相信这样做的“推荐”方法是覆盖自定义UIScrollView子类中的layoutSubviews。如果您是开发人员计划成员,那么在2010年WWDC会议中,您应该能够获得这一点(IIRC)。

假设您不能继承UIScrollView的子类(根据您对修改现有代码的限制),您可以执行以下操作。

让“staticView”是“非移动内容”您想保留固定:

UIView *staticView; 

创建伊娃(可能是在您的视图控制器),以保持其初始中心:

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中这一次:当然)。

我还没有想过通过在你的静态视图上进行转换的含义 - 在这种情况下你可能还得做一些操作。