2009-10-06 29 views
10

tôi có uilabel và uislider trên một chế độ xem. tôi muốn đặt thời gian của nhãn bằng cách sử dụng slider.range của thanh trượt là 00:00:00 đến 03:00:00. có nghĩa là 3 giờ.và intervel trên thanh trượt là 0,5 phút. Cũng làm thế nào để hiển thị. Tôi muốn bộ đếm thời gian chạy ngay cả khi ứng dụng được đóng lại.làm thế nào để hiển thị đếm ngược trên uilabel trong iphone?

Trả lời

40

Trước hết, không có cách nào để giữ bộ hẹn giờ chạy sau khi ứng dụng của bạn bị đóng. Ứng dụng nền đơn giản là không được phép trên iPhone. Có nhiều cách để giả mạo nó bằng bộ hẹn giờ (lưu dấu thời gian khi ứng dụng thoát và kiểm tra thời gian khi ứng dụng khởi động lại), nhưng nó sẽ không xử lý trường hợp bộ hẹn giờ của bạn hết trước khi ứng dụng được khởi động lại lên.

Đối với việc cập nhật UILabel với bộ đếm ngược, một NSTimer có thể hoạt động. Một cái gì đó như thế này, giả sử bạn có một bộ đếm thời NSTimer, một int secondsLeft, và một countdownLabel UILabel trong lớp học của bạn:

Tạo bộ đếm thời gian:

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

Phương pháp updateCountdown:

-(void) updateCountdown { 
    int hours, minutes, seconds; 

    secondsLeft--; 
    hours = secondsLeft/3600; 
    minutes = (secondsLeft % 3600)/60; 
    seconds = (secondsLeft %3600) % 60; 
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds]; 
} 

tôi làm điều gì đó tương tự trong một trong các ứng dụng của tôi, nhưng hiện tại không có mã nào.

+0

giá trị của secondsLeft là gì. –

+0

Đó sẽ là số giây bạn muốn bộ hẹn giờ chạy, rất có thể thiết lập nơi khác dựa trên giá trị của UISlider. –

+0

như shawn nói, bạn không thể giữ cho bộ đếm thời gian chạy sau khi ứng dụng được đóng lại, vì vậy hãy chắc chắn để theo dõi thời gian bắt đầu khi ứng dụng của bạn gửi UIApplicationWillTerminateNotification (tôi nghĩ rằng đó là, tôi là gỉ). Cách giải quyết duy nhất cho bộ hẹn giờ hết khi ứng dụng không chạy là sử dụng thông báo đẩy. nhưng điều đó có thể tốn kém. – pxl

2

Mã này sai.

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

Cần có.

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

bạn có thể giữ hẹn giờ của bạn đang chạy khi ứng dụng của bạn đã đi vào nền,

như @shawn Craver nói với u bạn không thể làm được điều này nhưng bạn có thể làm điều này khi ứng dụng có hiệu nền ("không chấm dứt") đó là một sự kiện khác nhau applicationDidEnterBackground và với đó bạn sẽ cần một số GCD đa luồng (công văn trung tâm lớn).

plase tham khảo liên kết này

set a timer in ios

Các vấn đề liên quan