【问题标题】:iPhone Horizontal ScrollingiPhone 水平滚动
【发布时间】:2011-03-16 08:00:45
【问题描述】:

我正在尝试创建一个具有水平滚动功能的应用,以便能够水平滚动浏览一系列图像。我观看了 WWDC Session 104 视频,虽然他们制作了一个有趣的应用程序,但他们很快就了解了它的基础知识。

我了解使用 UIScrollView,并且我必须启用分页。之后他们说我应该添加更多视图作为滚动视图的子视图,但我不清楚如何做到这一点。我也不清楚如何将图像添加到这些视图中。

您可能会说我在这方面还很陌生,因此我们将不胜感激。

【问题讨论】:

    标签: iphone uiscrollview horizontal-scrolling


    【解决方案1】:

    看看Apple's PageControl sample code。它相当简短且易于理解,因此您将了解设置项目的要点,在该项目中,当您水平滑动时会加载多个视图控制器。

    一旦你完成了这个设置,那么视图控制器就有责任加载它自己的内容(在你的例子中是一个图像)。在处理分页等问题之前,您应该确保先了解如何加载图像(使用线程等)。

    将其视为两个独立的任务。视图控件负责加载和显示图像。带有分页的滚动视图只是告诉适当的视图控制器何时加载自己(它不关心视图控制器加载后会做什么)

    祝你好运!

    【讨论】:

      【解决方案2】:

      您想查看UIImageView。这是一个专门用于保存图像的视图。

      当您添加图像时,您希望设置它们的矩形(可能对每个 UIImageView 使用 initWithFrame:),以便:

      • 第一张图片位于 0,0
      • 第二张图片位于 320,0
      • 第三个是 640,0(等)

      即每个图像在前一个图像的右侧 320 像素。

      最后一步是为您的UIScrollView 设置contentSize——这是一个描述滚动视图总大小的CGSize

      如果您有 3 张图像,则可以使用例如将其设置为 (320*3) * 480

      myScrollView.contentSize = CGSizeMake(320*3, 480);
      

      很多人在初始化滚动视图时,都有一个 for 循环或类似的循环,可以逐步浏览他们想要显示的图像。这些 for 循环看起来像这样:

      CGFloat scrollWidth = 0.f;
      for (UIImage *someImage in someNSArrayWithImages) {
          UIImageView *theView = [[UIImageView alloc] initWithFrame:
              CGRectMake(scrollWidth, 0, 320.f, 480.f)];
          theView.image = someImage;
          [myScrollView addSubview:theView];
          [theView release];
          scrollWidth += 320.f;
      }
      myScrollView.contentSize = CGSizeMake(scrollWidth, 480.f);
      

      通过这种方式,您可以将内容排列好,同时获得适合您的内容大小。

      如果您想让滚动视图“智能”滚动到每个图像并在人们向左/向右滑动时停止,您可以执行myScrollView.pagingEnabled = YES

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        假设您有“无限”图像,将它们全部放在一个巨大的 UIScrollView 中或启动时间之前将不是一个选项。 (UIView 的大小是有限制的)

        我解决它的方法:制作一个覆盖整个屏幕的 UIScrollView。它的内容应该是一个3*320宽480高的UIView,向左延伸320px,向右延伸320px。

        在里面放3个UIImageView,左中右。设置 paging=YES,以便 uiscrollview 剪辑到您创建的 3 个“页面”。

        确保你的类是 uiscrollview 的委托,并监听

        -(void)scrollViewDidEndDragging:(UIScrollView*)sv willDecelerate:(BOOL)notFinished
        -(void)scrollViewDidEndDecelerating:(UIScrollView*)sv
        -(void)scrollViewDidEndScrollingAnimation:(UIScrollView*)sv
        

        并在达到分页边界时进行适当的转换;移动图像并设置 ContentOffset 以便您再次查看中心图像。

        我建议你先做这个,然后再继续阅读......

        然后您会遇到一个错误,记录在此处UIScrollView - (bounces = NO) seems to override (pagingEnabled = YES) 和此处http://www.iphonedevsdk.com/forum/iphone-sdk-development/935-paging-uiscrollview.html,这使得您无法同时禁用弹跳和启用分页。所以启用弹跳和子类 UIScrollView,在那里推翻 setContentOffset 以防止弹跳。 (真正启用弹跳会带来不寻常的用户体验)

        【讨论】:

          猜你喜欢
          • 2011-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-30
          • 2013-12-06
          • 1970-01-01
          相关资源
          最近更新 更多