-2

ビューが数秒間読み込まれたらアニメーション画像を表示し、それを非表示にして他の2つの画像を表示したいのですが、アレイを使用して画像をアニメーション化し、タイマーを設定して関数onTimerを繰り返し呼び出します。この関数内でチェックします。画像が1回アニメーション化される場合は、タイマーを停止して他の2つの画像を表示します

プロジェクトを実行すると、画面をクリックするまで2つの画像が表示されないことを除けば、正常に機能します。

彼女はコードです:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
outline.animationImages = [NSArray arrayWithObjects:
                           [UIImage imageNamed:@"traffic.png"],
                           [UIImage imageNamed:@"red.png"],
                           [UIImage imageNamed:@"yellow.png"],
                           [UIImage imageNamed:@"green.png"], nil];

[outline setAnimationRepeatCount:1];
outline.animationDuration = 4;
[outline startAnimating];

 timer = [NSTimer scheduledTimerWithTimeInterval: 1.0/30.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];


}

-(void) onTimer {

if (![outline isAnimating]  == TRUE){ // if animation has been played once, do something
    NSLog(@"animation stopped, do something");
    rannan.image = [UIImage imageNamed:@"rannan.png"];
    outline.image = [UIImage imageNamed: @"outline.png"];
    [ timer invalidate];

    // do something
}
}

プロジェクトの実行中に画面をクリックするまで、何らかの理由でisAnimatingがTRUEに設定されていないようです。

私がこれに対する答えを見つけることを願っています:)

4

1 に答える 1

0

なぜ1/30秒ごとにタイマーを起動するのだろうか。アニメーションを4秒に設定して、4秒後にタイマーを起動できるようにします。

ビューがアニメーション化されていないかどうかを確認する方法:

CALayer *presentationLayer = (CALayer*)outline.layer.presentationLayer;
if(![presentationLayer animationKeys])
{
    NSLog(@"animation stopped, do something");
}
于 2013-02-12T09:30:01.217 に答える