适用于iOS的卡拉OK式进步亮点

时间:2015-03-10 20:04:45

标签: ios cocoa-touch core-graphics core-animation core-text

我想为iOS实现类似卡拉OK的进步亮点。

我知道我可以使用NSAttributedString并按字符突出显示文字。但是,我希望突出显示逐个像素,而不是逐个字符。

有什么想法吗?

P.S。不需要示例代码,只需指出正确的方向。

以下是一个例子:

Example

2 个答案:

答案 0 :(得分:2)

我想不出任何自动方式。有几个问题需要解决。我想这会很难。

最难的可能是找出每个单词的像素位置,这样你就可以调整着色以匹配音乐中的时间。使用文本和属性布局,您可以让文本引擎为您提供每个单词的边界,然后将颜色属性应用于每个单词,因为它是说出/演唱的。你必须有关于每个单词的开始和结束的时间偏移的数据。

您可能必须使用Core Text来获取有关每个单词的边界矩形的布局信息。

一旦你得到它,你可以建立一个跟随文本流的路径(UIBezierPath或CGPath;它们是可以互换的),然后将该路径安装到形状层。然后,您可以使文本透明,使形状图层成为透过的彩色背景,并为形状图层的strokeStart和/或strokeEnd属性设置动画,以使其填充文本。您可能需要一个字一个字地用一个简短的动画来进行,这个动画在一个单词和下一个单词之间进行插值以获得正确的时间。

答案 1 :(得分:0)

你可能想看看Core Text,它是用于布局文本的低层框架,使用它你可以获得渲染所述效果所需的必要路径(我建议从类似答案开始)到this

有很多答案可以替代,也许更简单的答案,例如character by characterword-by-word,这可能更容易实现。