检测手指触摸文本

时间:2009-05-08 08:27:25

标签: iphone objective-c cocoa-touch

我想用手指触摸读取屏幕上显示的字符串,意味着当我的手指移动到屏幕上显示的文本时,手指下方的文字应该突出显示。有没有办法使用UITextView或任何其他类来做到这一点。另外,我想从已经记录了句子的声音文件中播放与该单词相关联的声音。 如果有人知道它善意回复。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

这是两个问题。

要知道手指指向文本的位置,您需要知道UITextView在哪里布置字符。这不是UITextView记录支持的内容,因此接下来就是自己绘制文本。这个关于embedding a custom font的stackoverflow问题有一些链接甚至一些代码可以解决这个问题。您需要添加的是跟踪角色的进展,以便准确了解每个角色的渲染位置(或者您甚至可以使用其他核心图形函数来获取每个角色的精确边界框)。

很明显,一旦你知道被挖掘过的角色,你也会知道它所属的那个词。如果句子以完整和单个单词录制,您可能会获得最佳质量,这样您就可以在需要时播放。 playing sounds loaded from the internet上的另一个stackoverflow问题有一些与加载和播放音频有关的链接和片段。

答案 1 :(得分:0)

我正在写一篇iPhone文本编辑器中这样做。由于多种原因,我已经将UIView子类化为绘制文本(而不是UITextView),我必须实现类似这样的东西来提供像文本视图一样的可移动游标。我所做的是使用固定宽度的字体(确切地说是Courier),然后我采用触摸的x坐标并将其除以字符的宽度并将答案向下舍入。这会给你一个字符索引。

然而,如果有可能,找到一种方法来做到这一点而不自己绘制文本(如果文本是用户输入的或实际上除了硬编码之外),因为Apple在其UITextView类中提供了很多功能,这很痛苦复制:编辑,光标,自动换行,滚动等

如果您无法从子类UITextView获取触摸事件,将透明视图/图层放在文本顶部并从中获取触摸事件,那么您可能只需要弄清楚打开和关闭此功能以进行编辑的方法。

凯尔

答案 2 :(得分:0)

我想出了一个方便的技巧来做到这一点。在drawRect中,模仿UITextView将绘制的文本,但实际上并不绘制文本。将字体设置为Helvetica 17点,唯一的半棘手部分是处理自动换行。您已经有要显示的文本,您可以通过调用sizeWithFont来获取该默认字体中每个单词的大小。然后保存每个单词的矩形,当用户触摸视图时,找到哪个存储的矩形包含触摸的点。要测试和校准几何体(线间距等),请自己以不同的颜色绘制文本。当你得到它以便你只能看到一种字体颜色时,你就完美了。

如果有人想要,我可以发布我的代码。