0

我有一个由于某种原因没有动画的动画。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.hidden = YES;
    self.nameLabel.text = [self.name uppercaseString];
    self.gradient1.alpha = .9;
    self.gradient1.image = [UIImage imageNamed:@"heart.png"];
    self.gradient1.animationImages = [[NSArray alloc] initWithObjects:
                                      [UIImage imageNamed:@"gradiant1.png"],
                                      [UIImage imageNamed:@"gradiant2.png"],
                                      ...
                                      [UIImage imageNamed:@"gradiant26.png"], nil];
    self.gradient1.animationDuration = .5;
    self.gradient1.animationRepeatCount = 1;

    [self updateStats:nil];

}

-(void)updateStats:(NSTimer*)timer{
Utilities *utility = [[Utilities alloc] init];
[utility getDataWithSSID:self.ssID completion:^(bool *finished, NSArray *objects) {
    if (finished){
        ...
        [self.gradient1 startAnimating];
    }
    self.twoSecTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self
                                                      selector:@selector(updateStats:)
                                                      userInfo:nil
                                                       repeats:NO];

}];

}

有时它会动画一次或两次然后停止,即使计时器继续一遍又一遍地敲击。其他时候它根本没有动画。但是,我有几个占位符按钮,我把它们放在情节提要上,它们没有与任何东西绑定,每当我按下其中一个按钮时,它就会在下次计时器按下时动画(实际上每当我按下屏幕时,即使我没有有任何类型的手势识别器..)。另外,当我在这个 ViewController 中添加我想要做的所有其他垃圾时,它每隔一次被调用时就会动画。所以我认为这比我忘记的更深,所以设置一些属性。

4

1 回答 1

1

将动画触发器移动到该视图实际可见的时刻可能是一个更好的主意 - 因此移动到viewDidAppear:.

您创建递归计时器调度的方式也让我不寒而栗。我想它对你来说很好,但我肯定会建议使用repeats设置为的标志YES

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.hidden = YES;
    self.nameLabel.text = [self.name uppercaseString];
    self.gradient1.alpha = .9;
    self.gradient1.image = [UIImage imageNamed:@"heart.png"];
    self.gradient1.animationImages = [[NSArray alloc] initWithObjects:
                                      [UIImage imageNamed:@"gradiant1.png"],
                                      [UIImage imageNamed:@"gradiant2.png"],
                                      ...
                                      [UIImage imageNamed:@"gradiant26.png"], nil];
    self.gradient1.animationDuration = .5;
    self.gradient1.animationRepeatCount = 1;
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    //animate right away...
    [self updateStats:nil];
    //trigger new animations every two seconds
    self.twoSecTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self
                                                      selector:@selector(updateStats:)
                                                      userInfo:nil
                                                       repeats:YES];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self stopUpdatingStats];
}

-(void)stopUpdatingStats
{
    [self.twoSecTimer invalidate];
}

-(void)updateStats:(NSTimer*)timer
{
    NSLog(@"updating");
    [self.gradient1 startAnimating];
}
于 2013-03-01T01:23:54.527 回答