私が見ているように、2つのオプションがあります。
1.コアテキスト属性
Core Textを使用すると、単語に下線を付けたり、他の多くの装飾を適用したりできます。テキストに下線を付ける例を次に示します。
//Create a font
CTFontRef sysUIFont = CTFontCreateUIFontForLanguage(kCTFontSystemFontType,
24.0, NULL);
//Create a string
NSString *aString = @"Random text";
//Choose the color
CGColorRef color = [UIColor blueColor].CGColor;
//Single underline
NSNumber *underline = [NSNumber numberWithInt:kCTUnderlineStyleSingle];
//Pack the attributes into a dictionary
NSDictionary *attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:
(id)sysUIFont, (id)kCTFontAttributeName,
color, (id)kCTForegroundColorAttributeName,
underline, (id)kCTUnderlineStyleAttributeName, nil];
//Make the attributed string
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:string
attributes:attributesDict];
これでテキストに下線を付けることができますが、歌詞が進むにつれて下線が単語から単語へと移動するのをアニメーション化する方法がわかりません。
2.カスタムUIViewアンダースコア
次に、2番目のオプションは、UIViewをサブクラス化するカスタムアンダースコアクラスを作成することです。これはアニメートするのが簡単でしょう。アンダースコア用に別のクラスを作成する必要はありません(私はそれをお勧めします)。UIViewを作成し、次のようなアニメーションを使用して、単語から単語へと移動してアニメーション化することができます。
CABasicAnimation *underlineMove = [CABasicAnimation animationWithKeyPath:@"position"];
underlineMove.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
endPosition = CGPointMake((float)nextWord.x, (float)nextWord.y);
underlineMove.toValue = [NSValue valueWithCGPoint:endPosition];
underlineMove.duration = currentWord.duration;
[underlineView addAnimation:underlineMove forKey:@"animation"];