我正在为iPad上的自定义文档格式实现具有突出显示/注释功能的文档查看器。这些文件很长(如果打印在纸上,则为100到200页),我很难找到正确的方法。这里是需求:在iPad上呈现长文档
1)基本的丰富文本样式:控制左/右边距。控制字体名称,大小,前景/背景颜色和行间距。粗体,斜体,下划线等
2)选择和突出显示任意文本区域(不限于段落边界,如在Safari/UIWebView中)。
3)自定义剪切/复制/粘贴弹出窗口(UIMenuController)这是应用程序的基本要求之一。
我的第一个实现基于UIWebView。我只是将文档呈现为CSS,用于文本样式。但是我无法获得所需的文本选择行为(跨段落边界),并且无法从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文档真的很烂?
无论如何,谢谢你的帮助!
我发现SDK文档非常好。你似乎正在一个SDK目前有点虚弱的领域工作。 – zoul 2010-06-13 18:57:29
SDK文档非常适合通过连接一堆预先存在的组件来构建应用程序。但是开发自定义组件所需技术的文档对我来说似乎严重缺乏。 – benjismith 2010-06-13 20:17:03
@benjismith 你好, 我也在研究这样的应用程序。我需要解析一个epub文件。你有什么想法吗?你是如何做分页的?我有多个Xhtml页面,我无法弄清楚,我该如何做分页?任何你的帮助将不胜感激。 谢谢 – 2010-07-03 05:47:34