gpt4 book ai didi

ipad - 如何创建类似于 iWorks for iPad 中的 iPad 文档预览界面

转载 作者:可可西里 更新时间:2023-11-01 03:28:17 24 4
gpt4 key购买 nike

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

我知道只有两个源代码示例可以在 iPad 上实现文档预览界面,例如在 Number、Pages 等中找到的那些。

infoNgenOmniGroup Framework

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

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

alt text

更新

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

最佳答案

“包装 View ”是将显示整个预览轮播的主视图 Controller 。

“旋转木马”本身就是一个 UIScrollView。只需创建 ScrollView 并将 pagingEnabled 属性设置为 YES。通过设置框架将其布局为适当的尺寸,然后将其添加到包装器 View Controller 。您还需要将轮播 View 的 contentSize 属性设置得足够大。通过将文档数量加上另外两个文档的宽度乘以旋转木马的宽度来计算。 如果想让两边的文档都显示一点点,那就用文档数乘以 ScrollView 的宽度减去几个像素。

编辑

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

结束编辑

请注意,正如 Matthew 在评论中正确指出的那样,您实际上只创建了所需的 3 个 View ,如后所述。

您的文档预览可以是您喜欢的任何对象,正如您提到的,UIWebView 可用于呈现 HTML。无论您想使用什么来表示缩略图,诀窍在于对它们进行布局。

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

要处理渲染和滚动,您需要将包装器变成 UIScrollViewDelegate。委托(delegate)应该告诉 UIScrollView 在每次滚动动画完成时删除并重新呈现 ScrollView 。

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

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

祝你好运!

编辑 2:

现在想想,这一整套分页控件完全可以封装成一个UIScrollView的子类或者类。我将尝试着手解决这个问题。

关于ipad - 如何创建类似于 iWorks for iPad 中的 iPad 文档预览界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4550524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com