【问题标题】:iPhone Horizontal Scrolling TableiPhone水平滚动表
【发布时间】:2011-02-11 17:46:33
【问题描述】:

我需要在 iPhone 上创建一个水平滚动图像库的视图。问题是这个画廊有可能需要呈现 100 到 1000 幅图像,所以我想避免一次将它们全部加载到单个 UIScrollView 中并破坏性能。我需要创建一个视图来回收视图对象(如 UITableView)以提高性能并减少内存开销,但它需要以水平方式滚动。

有什么想法吗?是否可以让 UITableView 水平操作?

谢谢!

【问题讨论】:

    标签: iphone uitableview uiscrollview horizontal-scrolling


    【解决方案1】:

    您可以使用大滚动视图,并监视滚动位置的变化。您可以在图像进入实际可视区域时将它们添加为子视图,并在它们滚动离开时将其移除。

    这样,您只需要在任何给定时间出现少量图像视图,但您可以让它们看起来都“在那里”。

    您甚至可以通过更改图像和位置来回收图像视图,这样您就不会创建和破坏复杂的对象。这就是 UITableView 对单元格所做的。

    【讨论】:

    • 感谢您的想法。我希望有一种方法可以在操作系统中使用回收机制,而不必在我自己的代码中管理所有这些……但我会对此进行一些尝试,看看它是如何执行的。
    • 有一种使用 UITableViewController 的方法,请在下面查看我的答案
    【解决方案2】:

    就像应用一个变换一样简单。

    这里是代码。把它写在你的 tableViewController 初始化中:

    self.view.frame = CGRectMake(100,-5,250,350); //any Frame of your choice
    CGAffineTransform trans = self.view.transform; // get current transform (i.e. portrait)
    trans = CGAffineTransformRotate(trans, (M_PI / -2.0)); // rotate 90 degrees to go landscape
    self.view.transform = trans; // set current transform (landscape)
    

    但是现在你需要意识到你的轴也被交换了。您对高度所做的任何更改都会更改宽度(反之亦然),对 origin.x 所做的任何更改都会更改 origin.y(反之亦然)

    【讨论】:

    • 你想要 "eg" 而不是 "ie" -- 来自Wikipedia: "eg" 是 "exempli gratia" ("for example", "for instance") ; “ie”是“id est”(“即”,“换句话说”)
    【解决方案3】:

    我同意mbmcavoy,你也可以看看iPhone/iPad – AppStore like UIScrollView with paging and preview这篇文章解释了你对UIScrollView的需求,并提供了一个很好的例子和源代码。

    问候

    【讨论】:

      【解决方案4】:

      是否可以水平添加 UITableView?与屏幕方向不同。然后,您可以使用常规 UITableView 语义,其中每一行都是水平滚动而不是垂直滚动的图像。

      【讨论】:

        【解决方案5】:

        由于验证的答案不正确,因此在此旧线程上发布答案。您可以使用 UITableViewController 及其 dequeueReusableCellWithIdentifier 内置功能。

        诀窍是让你的 tableview 旋转,然后让你的单元格向相反的方向旋转。

        您将在 viewDidLoad 中添加:

        self.view.transform = CGAffineTransformMakeRotation(-M_PI_2);
        

        然后在 cellForRowAtIndexPath 中你会使用:

        cell.containerView.transform = CGAffineTransformMakeRotation(M_PI_2);
        

        确保将单元格的每个内容都添加到容器视图(在本例中为 containerView),这样您只需旋转容器而不是每个单元格子视图。

        另外请注意,它更适用于方形尺寸的单元格,否则您可能会在计算高度/宽度时遇到困难。

        【讨论】:

          【解决方案6】:

          我想我有答案关于水平滚动UITableView:

          1. 创建一个UIScrollView(并禁用 垂直滚动)
          2. 在滚动条内添加UITableView 查看
          3. 随您更改表格视图宽度 希望并更新 UIScrollView.contentSize 作为 表格视图宽度

          【讨论】:

          • 添加表格视图不会使其水平滚动,无论宽度如何。
          猜你喜欢
          • 2011-03-16
          • 1970-01-01
          • 2019-01-06
          • 1970-01-01
          • 1970-01-01
          • 2021-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多