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];

}];

}

タイマーが何度もヒットし続けても、1回または2回アニメートしてから停止することがあります。また、まったくアニメーション化されない場合もあります。ただし、ストーリーボードに配置するプレースホルダーボタンがいくつかあり、それらは何にも関連付けられていません。ボタンの1つを押すと、次にタイマーがヒットしたときにアニメーション化されます(実際には、画面をヒットしなくても、画面をヒットするたびにアニメーション化されます)。あらゆる種類のジェスチャ認識機能があります。また、この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 に答える