文本在UITextView中闪烁

时间:2014-12-11 16:26:46

标签: objective-c animation uitextview

任何人都知道如何在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);

                          }];

}

它应该有效,但只要盯着动画它就会完成。 请给我一个很好的建议!

干杯,

1 个答案:

答案 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++;
}