如何为iPhone创建水平滚动视图?

时间:2009-06-24 10:43:24

标签: iphone scroll

Safari使用选项卡式网页执行此操作。 AppStore(3.0)使用应用程序的预览图像执行此操作。视图水平滚动并锁定在每个视图的中心。 知道怎么做到这一点吗?

2 个答案:

答案 0 :(得分:6)

你需要:

  1. 启用了分页的ScrollView,三个屏幕宽。
  2. 要在滚动视图中包含三个子视图 - L(左侧内容,位于0,0),C(中心内容,位于320,0),R(右侧内容,位于640,0)。 C是您最初要显示的内容。 L是用户向左滚动时显示的内容。
  3. 将scrollview的contentoffset设置为320(对于纵向模式),因为您希望C最初显示,而不是L.
  4. 每次滚动完成时,contentoffset将是屏幕的整数倍。如果你仍然显示C(contentoffset是320),那你就没事了。如果contentoffset现在为0或640,那么你需要做一些工作。
  5. 如果用户向左滚动 - 您具有相同的视图层次结构,但现在滚动视图显示L而不是C,因为contentoffset为0,scrolloffset为0.您现在应该重置所有内容,以便您拥有XLC并且滚动偏移为320 - 如果用户想要再次向左滚动。换句话说,C成为新的R,L成为新的C,如果用户再次向左滚动,则X是要显示的新内容。

    要覆盖的方法是:

    (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView
    

答案 1 :(得分:0)

我会使用类型为kCATransitionPush的CATransition来执行此操作。

CATransition *animation = [CATransition animation];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight]; //or ...FromLeft, as the case may be

到目前为止,我已经使用CATransitions获得了比使用其他技术更好的性能,但这可能取决于几个因素。

在Apple的示例代码中查看TransitionView类,了解如何构建转换视图的示例。有了这门课,你可以这样做:

- (void)replaceSubview:(UIView *)oldView withSubview:(UIView *)newView transition:(NSString *)transition direction:(NSString *)direction duration:(NSTimeInterval)duration;