iphone – 在iPad上渲染长文档

iphone – 在iPad上渲染长文档,第1张

概述我正在为iPad上的自定义文档格式实现具有突出显示/注释功能的文档查看器.文件有点长(100到200页,如果在纸上打印),我很难找到正确的方法.以下是要求: 1)基本的富文本样式:控制左/右边距.控制字体名称,大小,前景/背景颜色和行间距.大胆,斜体,下划线等 2)选择和突出显示任意文本区域(不限于段落边界,如Safari / UIWebView). 3)自定义剪切/复制/粘贴d出窗口(UIMen 我正在为iPad上的自定义文档格式实现具有突出显示/注释功能的文档查看器.文件有点长(100到200页,如果在纸上打印),我很难找到正确的方法.以下是要求:

1)基本的富文本样式:控制左/右边距.控制字体名称,大小,前景/背景颜色和行间距.大胆,斜体,下划线等

2)选择和突出显示任意文本区域(不限于段落边界,如Safari / UIWebVIEw).

3)自定义剪切/复制/粘贴d出窗口(UIMenuController)这是应用程序的基本要求之一.

我的第一个实现是基于UIWebVIEw.我只是将文档渲染为带有CSS的HTML文本样式.但我无法获得我想要的那种文本选择行为(跨越段落边界),并且无法从UIWebVIEw中自定义UIMenuController.

所以我开始研究一种javascript方法,使用JQuery伪装设备文本选择行为来捕获触摸事件并动态修改DOM以更改所选文本区域的背景颜色.我构建了一个假的UIMenuController控件作为隐藏的div,定位它并在有活动选择区域时取消隐藏它.

不是太寒酸.

主要问题是它是SLOOOOOOOW.滚动文档非常快捷,但动态更改DOM并不是很快捷.另外,我无法弄清楚如何重新创建放大镜放大镜,因此我的假文本选择GUI与本机实现看起来并不完全相同.此外,我还没有实现JavaScript层和objective-c层之间的通信桥梁(应用程序的其余部分存在),但它正在形成一个巨大的麻烦.

所以我一直在关注CoreText,但网上有很少的例子.我用这个简单的小演示花了一点时间:

http://github.com/jonasschnelli/I7CoreTextExample/

它展示了如何使用CoreText将NSAttributedText字符串绘制到UIVIEw中.但它有自己的问题:它没有实现文本选择行为,并且它没有呈现UIMenuController,所以我不知道如何实现这一点.而且,更重要的是,它试图一次性绘制整个文档,对于长文档而言会显着降低性能.我的文档可以包含数千个段落,并且一次只能在屏幕上显示不到1%的文档.

从好的方面来说,这些文档已包含精确的格式信息.我知道每行文本的确切页面位置,所以我不需要布局引擎.

有谁知道如何使用CoreText实现这种视图?我理解一个完整的实现对于这样的问题来说是过度的,但我正在寻找一个有一些基本要求的好的CoreText示例:

1)精确布局&格式化控件(使用我已经计算过的格式化指标和文本样式).

2)任意选择文本.

3)自定义UIMenuController.

4)为屏幕外对象有效地回收资源.

当文本元素滚动到屏幕外时,我很乐意实现自己的回收,但是不需要重新实现UIScrollVIEw吗?

我对iPhone开发是全新的,并且仍然习惯于Objective-C,但我已经使用其他语言(Java,C#,flex / actionscript等)超过十年,所以我对此感到自信我有能力完成工作,只要我对iPhone SDK有更好的感觉,并为这样的东西提供常见的编码模式.它只是我,还是SDK文档真的很糟糕?

无论如何,谢谢你的帮助!

解决方法 您的文档是否具有除每个段落之外的任何语义组件?如果您已经有一些部分或页面的概念,我建议您将每个部分或页面渲染为独立的表格单元格.创建一个让您忘记实际正在查看UItableVIEw的表格单元非常简单.你需要做的只是覆盖drawRect:和setSelected:和setHighlighted:和tah dah!除非您需要,否则不再使用细胞分裂器.此外,您可以使用tablevIEw作为基础来做一些漂亮的事情.如果您在UItableVIEw中定义了部分,那么您可以使用一个漂亮的标题,在您翻阅文档时滚动.您可以做的另一件事是添加“跳转到部分”栏/书签菜单,这样您就不必跨部分边界提供选择.

大规模复制粘贴块在系统上也会非常痛苦.此外,如果您经历了提供此内容的麻烦,您可能不希望让某人一次性复制所有内容太容易…(如果没有更多细节,请不要遵循这一思路).

如果您确实想要提供复制粘贴选项,则可以向每个逻辑页面或部分添加按钮,以便用户方便地立即选择和复制整个部分. (也许引用相关?)

我建议您在SDK文档中查找UItableVIEwCell UItableVIEwDelegate和UItableVIEwDataSource,因为如果您选择使用此建议,这些页面将非常有用.

总结

以上是内存溢出为你收集整理的iphone – 在iPad上渲染长文档全部内容,希望文章能够帮你解决iphone – 在iPad上渲染长文档所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1083972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存