2011-08-01 31 views
1

可能重複:
UIScrollView pauses NSTimer until scrolling finishes滾動型螺紋計時器iphone

我有一個滾動視圖和標籤,以顯示倒計時日期。我有倒計時工作,但每當我拖動scrollview上下倒計時停止,但當我釋放我的手指它開始工作了。我知道它與多線程有關。這是我的代碼

-(void) viewdidload 
{ 
    timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(updateLabel) userInfo:nil repeats:YES]; 
} 

-(void)updateLabel { 


    NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

    NSDateComponents *countdown = [calender 
            components:(NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
            fromDate:[NSDate date] 
            toDate:destDate 
            options:0]; 

    timerCountDown.text = [NSString stringWithFormat:@"%dday %dh %dm %ds", [countdown day],[countdown hour],[countdown minute],[countdown second]]; 
} 

回答

0

您通過以下方式將文本設置爲UILabel。

NSString *cntTime = [NSString stringWithFormat:@"%dday %dh %dm %ds", [countdown day],[countdown hour],[countdown minute],[countdown second]]; 
[timerCountDown performSelectorOnMainThread:@selector(setText:) withObject:cntTime waitUntilDone:YES]; 

編輯:

的方法應該是-(void)viewDidLoad

同時,給予一定的時間間隔,比如1秒,

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

而且,是U實施任何UIScrollViewDelegate的方法呢?

+0

我試過了,但它沒有工作:( – kevin

+0

檢查我編輯的答案 – Ilanchezhian

+0

我沒有實現任何scrollviewdelegate – kevin

1

而不是通過添加一個線程或什麼不是所有的麻煩去的,使這個簡單的:

  1. 手指下降/的touchesBegan。記錄或保存 毫秒(A)
  2. 在手指上/ touchesEnded(?)記錄或再次保存 當前時間(B)的B
  3. 減去當前的時間有未接/暫停 時間然後您從計時器的時間中減去毫秒。

唯一的問題是,屏幕上的時鐘在滾動時會暫停,但一旦您釋放,它會再次更新或刷新。

希望這可以以比線程方式更簡單的方式解決您的問題。 LH

0

Nideo的答案很好(只要你在嚴格的倒計時中進行,你可以預測你所展示的東西的價值)。但是,您可能會發現自己需要顯示隨機發生的事件計數。如果是這樣,你可以實現scrollview委託方法scrollViewDidScroll:並刷新其來源的數據(即調用updateLabel)。你也可以對UIScrollView進行子類化並實現touchesBegan:/ touchesMoved:/ touchesEnded:,刷新每個中的顯示值,然後將事件傳遞給super以允許正常的觸摸處理。