1

したがって、現在、ユーザーがスライドしたときにサブビュー内でアニメーションを開始することを目的としたUIViewcontrollerにUISliderがあります..ユーザーはスライドして、1 日の特定の時間帯のバッテリーのエネルギーを確認できます。

現時点では、ビューが読み込まれると、UISlider がスライダーの最初から自動的にスライドを開始し、5 秒以内に最後までスクロールするようになります。

このループを使用して、uislider のすべての値を循環するループを実装しました。

for (int i = 0; i < [anObject count] - 2; i++)
{
    sleep(.25);
    NSUInteger index = (NSUInteger)(slider.value + 0.5); // Round the number.
    [slider setValue:index animated:YES];
}

[anObject count] - 2この時間帯は 62 ですが、サーバーからデータを取得しているため、15 秒ごとに変化して増加します。

しかし、それはさておき、なぜこれがうまくいかないのですか?ループ?

編集:

だから私がNSTIMERでやったことはここにあります

[NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(animateSlider) userInfo:nil repeats:NO];

次のようになりanimateSliderます。

- (void)animateSlider:(NSTimer *)timer
{
    NSLog(@"Animating");
    NSUInteger index = (NSUInteger)(slider.value + 0.5); // Round the number.
    [slider setValue:index animated:YES];
}

しかし、運が悪い... NSTimerが「起動」しないのはなぜですか..... nstimerメソッドを起動するメソッドがあったことを漠然と思い出しますが、それが必要かどうかはわかりません...

編集:

ああ、それには「火」が必要です....

NSTimer *timer = [NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(animateSlider) userInfo:nil repeats:NO];
[timer fire];

しかし、何らかの理由で一度しか発火しません....何かアイデアはありますか?

4

1 に答える 1

2

「なぜか一度しか発射されない…」

NSTimer の設定を次のように変更した場合:

NSTimer *timer = 
   [NSTimer scheduledTimerWithTimeInterval:0.25 
                                    target:self 
                                  selector:@selector(animateSlider:) 
                                  userInfo:nil 
                                   repeats:YES];

これにより、現在の実行ループでタイマーがすぐにスケジュールされます。

また、「繰り返し」パラメーターが「YES」であるため、タイマーを無効にするまで、1/4 秒ごとにタイマーを繰り返します (スライダーが目的地に到達したときなど、終了条件に達したときに行う必要があります)。

PSタイマーのターゲットのセレクターメソッド宣言を少し変更する必要があります。 Apple のドキュメントによると、「セレクターは、void を返し、引数を 1 つ取るメソッドに対応している必要があります。タイマーは、自分自身を引数としてこのメ​​ソッドに渡します。」

animateSliderしたがって、代わりに次のように" " を宣言します。

- (void)animateSlider: (NSTimer *) theTimer;
于 2013-07-09T22:57:57.320 に答える