2012-04-21 14 views
4

次のコードを使用して時刻を表示しています...私のviewControllerにスクロールビューがあります...ここでは00:00.00(mm:ss:SS)(分:seconds:milliseconds)ミリ秒単位で秒を増やし、ミリ秒単位で秒を増分することを目標にしています。しかし、私は75:00.00(mm:ss:SS)から開始する時間を表示したいので、ミリ秒、分:00:00.00(mm:ssS)...どうすればいいですか?私はドラッグ&アウトが解除すると、スクロールビューを保持するときNStimerがiOSで正しく動作しない

私はすでに次のリンクでSOでこれを求めている... NSTimer Decrease the time by seconds/milliseconds

は、私は私は(もバックグラウンドで)時間が計算されていないそのコードに従ってくださいマウスクリックは...

enter code here 
@interface ViewController : UIViewController 
{ 
    IBOutlet UILabel *time; 
    NSTimer *stopWatchTimer; 
    NSDate *startDate; 
    NSTimeInterval secondsAlreadyRun; 
} 

- (void)reset:(id)sender; 
- (void)onStartPressed:(id)sender; 
- (void)onStopPressed:(id)sender; 


enter code here 
-(void)showActivity:(NSTimer *)tim 
{ 
    NSDate *currentDate = [NSDate date]; 

    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    // Add the saved interval 
    timeInterval += secondsAlreadyRun; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 
    static NSDateFormatter * dateFormatter = nil; 
    if(!dateFormatter){ 
     dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"mm:ss.SS"]; 
     [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    } 
    NSString *timeString=[dateFormatter stringFromDate:timerDate]; 
    time.text = timeString; 

    // [dateFormatter release]; 
} 

- (void)onStartPressed:(id)sender 
{ 
    stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1/10 
                 target:self 
                selector:@selector(showActivity:) 
                userInfo:nil 
                repeats:YES]; 
    // Save the new start date every time 
    startDate = [[NSDate alloc] init]; // equivalent to [[NSDate date] retain]; 
    [stopWatchTimer fire]; 
} 

- (void)onStopPressed:(id)sender 
{ 
    // _Increment_ secondsAlreadyRun to allow for multiple pauses and restarts 
    secondsAlreadyRun += [[NSDate date] timeIntervalSinceDate:startDate]; 
    [stopWatchTimer invalidate]; 
    stopWatchTimer = nil; 

    // [startDate release]; 
    // [self showActivity:stopWatchTimer]; 
} 

答えて

11

あなたはNSRunLoopCommonModes

+0

また、関連性のある(そして私の最大のゴッチャ):各スレッドは独自のRunLoopオブジェクトを持っています。 [[NSRunLoop currentRunLoop]はあなたに現在のスレッドのrunloopオブジェクトを与えます;メインスレッドでタイマーをスケジューリングしない場合は、コードに応じてタイマーが決して動かないことがあります。 – pretzels1337

1
IBOutlet UILabel * result; 
NSTimer * timer;     
int currentTime; 


- (IBAction) start; 
- (IBAction) pause; 
- (void)populateLabelwithTime:(int)milliseconds; 

.mファイル...以下のコードの変更で私を助け

- (void)viewDidLoad 
{ 
    currentTime = 270000000; // Since 75 hours = 270000000 milli seconds 
    // ..... some codes.... 
} 
- (IBAction) start 
{ 
    timer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES]; 
} 

-(IBAction)pause 
{ 
    [timer invalidate]; 
} 

- (void)updateTimer:(NSTimer *)timer { 
    currentTime -= 10 ; 
    [self populateLabelwithTime:currentTime]; 
} 
- (void)populateLabelwithTime:(int)milliseconds 
{ 
    int seconds = milliseconds/1000; 
    int minutes = seconds/60; 
    int hours = minutes/60; 

    seconds -= minutes * 60; 
    minutes -= hours * 60; 

    NSString * result1 = [NSString stringWithFormat:@"%@%02dh:%02dm:%02ds:%02dms", (milliseconds<[email protected]"-":@""), hours, minutes, seconds,milliseconds%1000]; 
    result.text = result1; 

} 
+0

海で実行するようにタイマーを登録する必要があります...私は...このコードを私のビューコントローラでScrollViewを持って試してみましたが、私はそのビューコントローラで時間を表示しています。スクロール・ビューをドラッグ・アンド・ホールドすると時間が計算されません(バックグラウンドでも)...どうすればいいですか? – SriKanth

+0

ありがとうございました!それは私のために働いた.... – Aayushi

5

タイマは、特定の実行ループモードで実行ループにスケジュールされます。実行ループがこれらのモードの1つで実行されているときにのみ起動できます。 +scheduledTimerWithTimeInterval:...メソッドは、タイマーをデフォルトモードでスケジュールします。スクロールバーが操作されている間のイベントのトラッキングは、NSEventTrackingRunLoopModeを使用します。適切なモードでタイマーをスケジュールする必要があります。

仮想モードのセットであるNSRunLoopCommonModesにスケジュールすることができます。このようなモードで実行されるループは決して実行されませんが、それらはそのセットのメンバーであるモードで実行されます。デフォルトモードとNSEventTrackingRunLoopModeがそのセットに追加されます(NSModalPanelRunLoopMode)。

関連する問題