假设我有这样的文字:"今天下午3点见到我",我想动画放大"今天"部分从原始大小到x1.2然后返回(只是一种视觉效果,吸引用户注意文本的那一部分)。
我如何实现这一目标?简单的解决方案是使用3个分离的标签并为中间标签设置CGAffineTransformMakeScale动画,但这是一个可怕的解决方案,因为当文本发生变化时(例如,当我们将其本地化时)很难做到这一点其他语言)。
答案 0 :(得分:1)
我的建议是使用NSAttributedString
并使用CADisplayLink
刷新标签。像这样:
CADisplayLink *timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(animatePartOfText)];
[timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
-(void)animatePartOfText
{
//calculate the size
CGFloat size = 0 ;//......
self.textLable.attributedText = [self makeTextWithPartSize:size];
}
-(NSAttributedString*)makeTextWithPartSize:(CGFloat)size
{
NSAttributedString *firstPart = [[NSAttributedString alloc] initWithString:@"Meet me " attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}];
NSAttributedString *animatedPart = [[NSAttributedString alloc] initWithString:@"today" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:size]}];
NSAttributedString *lastPart = [[NSAttributedString alloc] initWithString:@" at 3 p.m" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]}];
NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString:firstPart];
[text appendAttributedString:animatedPart];
[text appendAttributedString:lastPart];
return text;
}
我不确定性能,但它应该有效。