任何人都知道如何在UITextView中动画文字闪烁? 关于闪烁动画,我想在NSArray中使用几种颜色变化,
这是我目前的方法:
- (void)startFontColorFlashing:(UITextView *)textView{
[UIView animateKeyframesWithDuration:2.0
delay:0.0
options:UIViewKeyframeAnimationOptionRepeat | UIViewKeyframeAnimationOptionCalculationModeCubic
animations:^{
NSLog(@"Font flash animation start");
NSArray *fontFlashColorsArr = @[[UIColor redColor], [UIColor blueColor]];
NSUInteger colorCount = [fontFlashColorsArr count];
for (NSUInteger i = 0; i < colorCount; i++) {
[UIView addKeyframeWithRelativeStartTime:i/(CGFloat)colorCount
relativeDuration:1/(CGFloat)colorCount
animations:^{
textView.textColor = fontFlashColorsArr[i];
}];
}
}
completion:^(BOOL finished){
NSLog(@"Finished the animation! %d", finished);
}];
}
它应该有效,但只要盯着动画它就会完成。 请给我一个很好的建议!
干杯,
答案 0 :(得分:1)
我尝试动画文本颜色变换时遇到了困难,就像你一样。我不确定这是否是最佳解决方案,但它适用于您要做的事情。只需添加一种方法来阻止changeTextColor被无限次调用,就像一个全局变量,这应该可以做到这一点
- (void)textViewDidBeginEditing:(UITextView *)textView {
[self changeTextColor:textView];
}
- (void)changeTextColor:(UITextView *)textView {
[self performSelector:@selector(changeTextColor:) withObject:textView afterDelay:0.3];
if (textView.textColor == [UIColor redColor]) {
textView.textColor = [UIColor blueColor];
} else {
textView.textColor = [UIColor redColor];
}
}
以下是一些使用多种颜色的更新代码。这假设self.count是一个处理闪烁次数的全局变量。如果您在同一个控制器中使用多个子类,这可能最好在UITextView的子类中完成。
- (NSArray *)colors {
return @[[UIColor redColor], [UIColor blueColor], [UIColor greenColor]];
}
- (void)changeTextColor:(UITextView *)textView {
if (self.count < 20) {
[self performSelector:@selector(changeTextColor:) withObject:textView afterDelay:0.3];
} else {
self.count = 0;
return;
}
NSInteger colorIndex = self.count % 3;
self.textView.textColor = self.colors[colorIndex];
self.count++;
}