UIView动画Autoreverse和Repeat不工作

时间:2014-06-26 20:20:02

标签: ios objective-c animation uiview uilabel

我想用Blink动画更改我的UILabel的文本。文本应为“text1”,黑色,消失,然后更改为“text2”和红色,反之亦然。 这是我的代码

#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *image;
@property (weak, nonatomic) IBOutlet UILabel *label;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self performSelector:@selector(combineAnimations) withObject:self afterDelay:0.0];
    self.label.textColor = [UIColor blackColor];
    self.label.text = @"text1";

    [self animateView];
}

- (void) animateView {
    [UIView animateWithDuration:2.0
                          delay:0.0
                        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat |UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         self.label.text = @"text2";
                         self.label.textColor = [UIColor redColor];
                     }
                     completion:nil];
}

我错过了什么?

1 个答案:

答案 0 :(得分:-1)

在完成块中使用两个相互调用的方法。您还可以调整快速淡入或淡出...这比简单的“眨眼”更不易震动。如果你想要闪烁,没有时间,只需将延迟设置为0.0。同样,您可以调整其中的alpha以获得淡入淡出效果。

- (void) animateView {

self.label.text = @"text2";
                     self.label.textColor = [UIColor redColor];
[UIView animateWithDuration:.5
                      delay:1.0
                    option:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     self.label.alpha = 1;
                 }
                 completion:{
      [self animateViewReverse];
}];
}

- (void) animateViewReverse {

 self.label.text = @"text1";
 self.label.textColor = [UIColor blackColor];
[UIView animateWithDuration:1.0
                      delay:1.0
                    option:UIViewAnimationOptionCurveEaseInOut
                 animations:^{
                     self.label.alpha = 1;

                 }
                 completion:{
          [self animateView];
}];
}

您似乎有点困惑的一件事是动画标签的文字。你实际上并没有为文本字符串设置动画,只是像alpha,size,position这样的东西。因此,在您的情况下,您可以在动画之前更改颜色和文本字符串,只需使用动画作为触发下一个动画/反向的方式 - 它还可以构建更多细微动画的功能(除了简单的闪烁之后)。

如果你想在没有动画的情况下这样做,你可以简单地创建两个方法,每个方法设置文本一个方式,然后调用另一个延迟,如:

[self performSelector:@selector(animationReverse) withObject:nil afterDelay:2];