2012-08-22 40 views
14

Tôi đang làm việc với một ứng dụng xử lý các sự kiện chuyển động thiết bị và cập nhật giao diện theo gia số 5 giây. Tôi muốn thêm chỉ báo vào ứng dụng sẽ hiển thị tổng thời gian ứng dụng đang chạy. Dường như một bộ đếm giống như đồng hồ bấm giờ, như ứng dụng Đồng hồ iOS gốc là một cách hợp lý để đếm thời gian mà ứng dụng đang chạy và hiển thị nó cho người dùng.Thêm bộ hẹn giờ hiển thị đếm ngược đang chạy vào ứng dụng iOS, như đồng hồ bấm giờ Đồng hồ?

Điều tôi không chắc chắn là việc triển khai kỹ thuật của đồng hồ bấm giờ như vậy. Dưới đây là những gì tôi đang nghĩ:

  • Nếu tôi biết khoảng thời gian giữa các lần cập nhật giao diện, tôi có thể thêm giây giữa các sự kiện và giữ số giây làm biến địa phương. Ngoài ra, một khoảng thời gian theo lịch trình 0,5 giây có thể cung cấp số lượng.

  • Nếu tôi biết ngày bắt đầu của ứng dụng, tôi có thể chuyển đổi các biến cục bộ cho đến nay cho mỗi lần cập nhật giao diện sử dụng [[NSDate dateWithTimeInterval:(NSTimeInterval) sinceDate:(NSDate *)]

  • tôi có thể sử dụng một NSDateFormatter với một phong cách thời gian ngắn để chuyển đổi từ ngày cập nhật để một chuỗi sử dụng phương thức stringFromDate

  • Chuỗi kết quả có thể được gán cho nhãn trong giao diện.

  • Kết quả là đồng hồ bấm giờ được cập nhật cho từng "đánh dấu" của ứng dụng.

Dường như với tôi việc triển khai này hơi quá nặng và không hoàn toàn giống với ứng dụng đồng hồ bấm giờ. Có cách nào tốt hơn, tương tác hơn để đếm thời gian mà ứng dụng đang chạy không? Có thể có một cái gì đó đã được cung cấp bởi iOS cho mục đích này?

+0

Xác định "quá nặng", "không hoàn toàn là chất lỏng" và "tương tác hơn". Bạn đang cố giải quyết vấn đề gì? – Jim

+0

Bởi quá nặng Tôi có nghĩa là các ứng dụng đang làm rất nhiều tính toán, và tôi đã đọc rằng các thao tác ngày liên quan đến ngày định dạng hoặc lịch là "đắt tiền" hoạt động. Tôi muốn giảm chi phí tính toán ngày cho mỗi lần cập nhật của đồng hồ bấm giờ –

Trả lời

22

Hầu như những gì @terry lewis gợi ý nhưng với một tinh chỉnh thuật toán:

1) sắp xếp một bộ đếm thời gian

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

2) khi đám cháy hẹn giờ, có được thời gian hiện tại (đó là tinh chỉnh, don' t đếm ve vì nếu có rung lắc trong bộ đếm thời gian, đánh dấu đếm sẽ tích lũy lỗi), sau đó cập nhật giao diện người dùng. Ngoài ra, NSDateFormatter là một cách đơn giản và linh hoạt hơn để định dạng thời gian hiển thị.

- (void)timerTick:(NSTimer *)timer { 
    NSDate *now = [NSDate date]; 

    static NSDateFormatter *dateFormatter; 
    if (!dateFormatter) { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
     dateFormatter.dateFormat = @"h:mm:ss a"; // very simple format "8:47:22 AM" 
    } 
    self.myTimerLabel.text = [dateFormatter stringFromDate:now]; 
} 
22

Nếu bạn nhìn vào the iAd sample code from Apple trong dự án biểu ngữ cơ bản họ có một bộ đếm thời gian đơn giản:

NSTimer *_timer; 
_timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES]; 

và phương pháp mà họ có

- (void)timerTick:(NSTimer *)timer 
{ 
    // Timers are not guaranteed to tick at the nominal rate specified, so this isn't technically accurate. 
    // However, this is just an example to demonstrate how to stop some ongoing activity, so we can live with that inaccuracy. 
    _ticks += 0.1; 
    double seconds = fmod(_ticks, 60.0); 
    double minutes = fmod(trunc(_ticks/60.0), 60.0); 
    double hours = trunc(_ticks/3600.0); 
    self.timerLabel.text = [NSString stringWithFormat:@"%02.0f:%02.0f:%04.1f", hours, minutes, seconds]; 
} 

Nó chỉ chạy từ khởi động, khá cơ bản.

+0

Và làm cách nào tôi có thể đặt lại bộ đếm cho 00:00:00? –

+0

Đối với Đồng hồ kim trong iOS https://github.com/Boris-Em/BEMAnalogClock –

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