5

カウントダウンタイマーを表示したい。開始日と終了日があります。残り時間を次のように表示する必要があります

日 : 時 : 分 : 秒

これどうやってするの?

4

3 に答える 3

18

以下のコードのようにカウントダウンを設定できます:-

 -(void) viewWillAppear:(BOOL)animated
 {
 timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];
 }

 -(void) updateCountdown 
 {

NSString *dateString = @"14-12-2012";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate *dateFromString = [[NSDate alloc] init];
// voila!
dateFromString = [dateFormatter dateFromString:dateString];


NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];



NSDateComponents *componentsHours = [calendar components:NSHourCalendarUnit fromDate:now];
NSDateComponents *componentMint = [calendar components:NSMinuteCalendarUnit fromDate:now];    
NSDateComponents *componentSec = [calendar components:NSSecondCalendarUnit fromDate:now];        


NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *componentsDaysDiff = [gregorianCalendar components:NSDayCalendarUnit
                                                            fromDate:now
                                                              toDate:dateFromString
                                                             options:0];



lblDaysSetting.text=[NSString stringWithFormat:@"%02d",componentsDaysDiff.day];
lblHouresSetting.text=[NSString stringWithFormat:@"%02d",(24-componentsHours.hour)];    
lblMinitSetting.text=[NSString stringWithFormat:@"%02d",(60-componentMint.minute)];  
lblSecSetting.text=[NSString stringWithFormat:@"%02d",(60-componentSec.second)];  



 }

今すぐあなたのロジックを設定してください

そのコードは、次のように私のプロジェクトとして出力されます::-

ここに画像の説明を入力

于 2012-11-22T05:05:48.120 に答える
5

これは.hファイルのコードです。

@interface UIMyContoller : UIViewController {

NSTimer *timer;
IBOutlet UILabel *myCounterLabel;
}

@property (nonatomic, retain) UILabel *myCounterLabel;
-(void)updateCounter:(NSTimer *)theTimer;
-(void)countdownTimer;

@end

.mファイルのコードは次のとおりです。

@implementation UIMyController
@synthesize myCounterLabel;

int hours, minutes, seconds;
int secondsLeft;

- (void)viewDidLoad {
[super viewDidLoad];

secondsLeft = 16925;
[self countdownTimer];
}

- (void)updateCounter:(NSTimer *)theTimer {
if(secondsLeft > 0 ){
    secondsLeft -- ;
    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    myCounterLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}
else{
    secondsLeft = 16925;
}
}

-(void)countdownTimer{

secondsLeft = hours = minutes = seconds = 0;
if([timer isValid])
{
    [timer release];
}
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateCounter:) userInfo:nil repeats:YES];
[pool release];
}

お役に立てれば。ハッピーコーディング

エイドリアン

于 2012-11-22T04:41:40.643 に答える
2

From Date から To Date までの時間コンポーネントを取得する以下の方法をお勧めします。

この方法は、時間、分、秒の 3 つの整数変数を手動でデクリメントするよりも洗練されています。これを行うと、秒が 0 に達したときに手動でチェックする必要があり、分を手動で 59 にリセットする必要があるなどの理由からです。このルートは一度行ったことがありますが、あまり良くありませんでした。

また、アプリを最小化すると、カウント ダウン クロックが停止します。3 つの整数 (時、分、秒) を使用して手動でカウント ダウン タイマーを減らしていた場合、アプリを最小化するとカウント ダウンが台無しになります。

このメソッドは 2 つの日付の差を自動的に計算するため、アプリがバックグラウンドの最小化状態から戻った場合でも、追加のコードなしで自動的に残り時間を再計算します。

-(void)viewDidLoad
{
    // instantiate a calendar object.
    gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateClock:) userInfo:nil repeats:YES];
    [countDownTimer fire];
}

-(void)updateClock:(NSTimer *)timer
{
    countDownDateFormatter = [[NSDateFormatter alloc] init];
    [countDownDateFormatter setDateFormat:@"hh:mm:ss"];

    NSDate *now = [NSDate date];

    NSDateComponents *comp = [gregorianCalendar components:NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit 
                                                  fromDate:now
                                                    toDate:countDownEndDate 
                                                   options:0];

    NSString *strTimeRemaining = nil;

    // if date have not expired
    if([now compare:countDownEndDate] == NSOrderedAscending)
    {
        strTimeRemaining = [[NSString alloc] initWithFormat:@"%02d:%02d:%02d", [comp hour],  [comp minute], [comp second]];
    }
    else 
    {
        // time has expired, set time to 00:00 and set boolean flag to no
        strTimeRemaining = [[NSString alloc] initWithString:@"00:00:00"];

        [countDownTimer invalidate];
        countDownTimer = nil;
    }

    lblCountDown.text = strTimeRemaining;

    [countDownDateFormatter release];
    [strTimeRemaining release];
}
于 2012-11-22T05:33:56.637 に答える