0

タイマーを含むアプリを構築しており、NSTimer クラスのラッパーであるカスタム クラス Timer を作成しました。タイマーの実行中に定期的に更新される、remainingTime というプロパティがあります。

私のビュー コントローラーである TimerVC は、Timer オブジェクトをインスタンス化し、timer.remainingTime に基づいてそのビューを更新する必要があります。どうすればこれを達成できますか?

ここでデリゲートを使用する必要があると思いますが、それがどのように機能するかわかりません。デリゲート メソッドを実装する必要があるクラスはどれですか。

それとも、私のアプローチがすべて間違っているのでしょうか?

編集: TimerVC 内で NSTimer を使用していない理由は、再利用のために抽象化し、ビューから切り離したいからです。

私のTimerクラスのコードは次のとおりです。

#import "Timer.h"

#define SECONDS_INTERVAL 1

@interface Timer()

@property (strong, nonatomic) NSTimer *timer;
@property NSInteger seconds;
@property NSInteger secondsRemaining;

@end


@implementation Timer
- (Timer *)initWithSeconds:(NSInteger)seconds {
    self = [super init];
    if (self) {
        self.seconds = seconds;
        self.secondsRemaining = self.seconds;
    }
    return self;
}

- (void)start {
    self.timer = [NSTimer timerWithTimeInterval:SECONDS_INTERVAL target:self selector:@selector(updateSecondsRemaining) userInfo:nil repeats:YES];
}

- (void)pause {

}

- (void)stop {
    [self.timer invalidate];
    self.timer = nil;
}

- (void)reset {
    [self stop];
    self.secondsRemaining = self.seconds;
}

- (void)updateSecondsRemaining {
    self.secondsRemaining = self.secondsRemaining - SECONDS_INTERVAL;

    if (self.secondsRemaining == 0) {
        [self timerFinished];
    }
}

- (void)timerFinished {
    [self reset];
}
4

3 に答える 3

2

通常、ビューのビュー コントローラーはそのデリゲートを実装します。

.h ファイルでプロトコルを定義します。その名前を としましょうCustomTimerDelegateid <CustomTimerDelegate> timerDelegate;カスタム タイマーにプロパティを追加します。カスタム タイマーが作成されたときにデリゲートを設定します。プロトコルには、View Controller がビューを更新するたびにタイマーによって呼び出される少なくとも 1 つのメソッドが含まれています。ビュー コントローラーはプロトコルを実装します。その .h ファイルで、ステートメントに追加<CustomTimerDelegate>します。@interfaceその .m ファイルで、プロトコルを介して呼び出されるメソッドを実装します。

それはあなたの質問に答えていますか?

于 2013-08-16T16:09:26.613 に答える
1

そのためにカスタムタイマーを作成する必要がある理由がわかりません。

TimerVC で、これを使用して新しいタイマーを作成します。

[NSTimer scheduledTimerWithTimeInterval:1.0
        target:self
        selector:@selector(timerCallback:)
        userInfo:nil
        repeats:YES];

timerCallback:これにより、毎秒メソッドが呼び出されます。このメソッドでは、残り時間のプロパティを更新でき、ビューも更新できます。

于 2013-08-16T16:12:21.760 に答える