【问题标题】:How to create iPad Document Preview interface like those found in iWorks for iPad如何创建类似于 iWorks for iPad 中的 iPad 文档预览界面
【发布时间】:2011-05-31 20:01:20
【问题描述】:

愿意为工作示例奖励 +500 奖金。

据我所知,在 iPad 上完成 Document Preview 界面的源代码示例只有 2 个,例如 Number、Pages 等中的示例。

infoNgenOmniGroup Framework

还有其他例子吗? infoNgen 是一个很好的简单示例,但是代码非常草率,而且写得很糟糕,非常无组织。

OmniGroup 是一个很棒的库,但是对于简单的项目来说太复杂了。

更新

我能够分解 infoNgen 的项目并制作一个带有 HTML 预览的准系统文档查看器,这似乎可以很好地更新文档中的信息并使其与预览保持同步。现在要解决的唯一问题是保存文档以供应用程序退出和重新启动时使用。 +500 赏金仍然适用于工作示例,但是,除非发布了工作示例,否则我不会打开赏金。

【问题讨论】:

  • 您到底在寻找什么?滚动的“轮播”视图?还是能够呈现文档的大缩略图?你处理什么样的文件? (后者将取决于您的文档是什么。)您是在寻找现有代码,还是在寻找实现/设计讨论?
  • 轮播以及文档预览渲染。文档可以呈现或保存为 HTML。
  • 至于保存,你有没有研究过Core Data? (顺便说一下,正在制作预览轮播。)
  • 顺便说一句,最新的更新(1.4)似乎不再像那样滚动了。

标签: ipad ios user-interface document-carousel document-preview


【解决方案1】:

“包装视图”是将显示整个预览轮播的主视图控制器。

“轮播”本身就是一个 UIScrollView。只需创建滚动视图并将pagingEnabled 属性设置为YES。通过设置框架将其放置到适当的尺寸,然后将其添加到您的包装视图控制器。您还需要将轮播视图的contentSize 属性设置为足够大。通过将文档数量加上另外两个文档的宽度乘以轮播的宽度来计算此值。 如果您希望两边的文档显示一点,则将文档数乘以滚动视图的宽度减去几个像素。

编辑

实际上,通过谷歌搜索这个问题让我找到了this post,它描述了实现此问题的另一种方法。本质上,您将滚动视图包装在自定义 UIView 子类中,该子类将触摸转发到 UIScrollView。这是必要的,因为 UIScrollView 只能为与其一样宽的页面“分页”。使用我的“将侧视图调整几个像素”的方法,您最终会得到一个不错的预览,但是偏移量会导致预览在滚动时跳转。 (我在将示例代码放在一起时尝试了我的方法。正如我刚刚解释的那样,它不起作用。)在使用自定义包装器之前,我将尝试另一种方法。 (我想知道内容插入是否可行。)

结束编辑

请注意,正如 Matthew 在 cmets 中正确指出的那样,您实际上只创建了您需要的 3 个视图,如下所述。

您的文档预览可以是您喜欢的任何对象,正如您所提到的,UIWebView 可用于呈现 HTML。不管你想用什么来表示你的缩略图,诀窍都是把它们布置出来。

我假设您有一个对象数组,尽管您可能正在使用 Core Data 来存储您的信息。要显示您的文档预览,请将它们添加到滚动视图中,但要位于“X”坐标的正确位置。要计算该值,请将当前文档的索引乘以滚动视图的宽度。使用文档预览的setFrame 方法应用此值。您还需要在当前预览之前和之后渲染预览,这样您就有了流畅的动画效果。

要处理渲染和滚动,您需要将包装器放入 UIScrollViewDelegate。每次滚动动画结束时,委托都应该告诉 UIScrollView 移除并重新渲染滚动视图。

要处理“轮播效果”(第一个和最后一个文档之间发生的循环),您的 UIScrollViewDelegate 应该检查contentOffset 属性并确定我们是否位于最后一个对象。如果显示最后一个对象,则将第一个对象渲染到右侧,就像其他对象一样。如果然后滚动到正确的对象,则使用[scrollView scrollToRect: CGRectMake(0,0,scrollView.rect.size.width,scrollView.rect.sizeheight) animated:NO]; 代码无缝跳转到开头。 (对第一个预览执行相同的操作。在左侧渲染第一个和最后一个,必要时以相同的方式处理)。

我希望这个答案有所帮助。我会尽可能地发布代码。

祝你好运!

编辑 2:

现在想来,这整个分页控件可以打包成一个 UIScrollView 子类或类别。我会努力解决这个问题。

【讨论】:

  • 我同意你的大部分建议(因此+1),但没有必要为所有文档都留出空间;事实上,这样做的内存效率非常低。相反,您在滚动视图中只需要 3 个视图,因为只有 3 个是可见的。当一个滑出任一侧时,它被重新用作新的滑入。今年夏天的 WWDC 的第 104 场会议,使用滚动视图设计应用程序,准确地展示了如何做到这一点:developer.apple.com/videos/wwdc/2010(您必须注册为Apple 开发人员可以下载视频,但可以使用未付费帐户)。
  • 我知道您实际上并没有创建所有视图,而且我知道它的效率是多么低,但是您仍然应该在 contentSize 中创建空间,以便可以更轻松地完成滚动数学。 编辑:感谢您指出视频。我去看看。
  • 你们中的任何人都可以为此发布一些工作代码吗,恐怕我无法从描述中弄清楚,当我尝试在 iTunes 中打开电影时,WWDC2010 链接会挂起我的 iTunes。我真的很想让这个例子工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多