使用时间和动画从字符串数组中更改 UILabel/UIButton 文本

Posted

技术标签:

【中文标题】使用时间和动画从字符串数组中更改 UILabel/UIButton 文本【英文标题】:Change UILabel/UIButton text from an array of strings with time and animation 【发布时间】:2014-09-30 20:37:09 【问题描述】:

获取UILabelUIButton 元素并在某个设定的时间范围内更改文本的最佳方法是什么,例如3 秒,其中包含带有淡入淡出动画的字符串数组集合的内容?

【问题讨论】:

【参考方案1】:

使用NSTimer 安排文本更改。例如,如果您的方法名为changeText,您可以使用[NSTimer scheduledTimerWithTimeInterval:3.0 target:self select:@selector(changeText) userInfo:nil repeats:YES]; 启动计时器,其中3.0 是以秒为单位的时间间隔。

至于动画,您有两种选择。您可以让文本淡出然后淡入,或者您可以让文本从一个字符串淡入到下一个字符串。要执行前者(淡入然后淡出),请使用以下内容:

[UIView animateWithDuration:0.5 animations:^
    textLabel.alpha = 0.0f;
 completion:^(BOOL finished) 
    textLabel.text = newString;
    [UIView animateWithDuration:0.5 animations:^
        textLabel.alpha = 1.0f;
    ];
];

这会在 0.5 秒内淡出文本标签(通过将 alpha 设置为 0),然后将文本设置为 newString 并将标签淡入。

或者,让文本从一个值淡入另一个值:

CATransition *animation = [CATransition animation];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionFade;
animation.duration = 1.00;
[textLabel.layer addAnimation:animation forKey:@"kCATransitionFade"];
textLabel.text = newString;

【讨论】:

@Diamond 代码进入计时器执行的函数中。在我的示例中,它将被称为 changeText,因此您将声明一个类似 -(void)changeText ... 的方法 对不起,我的意思是只应将动画代码添加到changeText 方法中。您应该在视图加载时启动计时器 (viewDidLoad)。我的代码也不包括从你的数组中选择文本字符串——这也应该放在changeText 中。但是,我要指出,*** 不是一个要求人们为您编写代码块的地方。如果您不确定 Objective-C 和 ios SDK 的基础知识,或许可以查看一些初学者教程。有很多关于计时器、动画/淡化文本和随机字符串的信息 - 在 SO 和其他地方。

以上是关于使用时间和动画从字符串数组中更改 UILabel/UIButton 文本的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableViewCell 内动画 UILabel 文本更改

UILabel尺寸更改不会使用自动布局设置动画

按下按钮时未从数组中填充 UILabel

如何在 animateWithDuration 的每个动画之间重复更改 UILabel 的文本?

在位置之前为 UILabel 尺寸设置动画

打字机效果文字动画