2012-05-11 26 views
5

Làm cách nào để ngăn không cho NSTimer bị trì hoãn bởi người dùng di chuyển một bảng?làm thế nào để ngăn chặn một NSTimer bị trì hoãn hoặc bị gián đoạn bởi các hành động giao diện người dùng trong iOS 5

Tôi tìm thấy câu trả lời:

Tôi đã có một bộ đếm thời gian mà lặp đi lặp lại khoảng 8 hoặc 9 lần với khoảng từ 0,4 tới 0,8 giây. Tôi không cần nhiều độ chính xác, nhưng nếu người dùng cuộn một bảng thì bộ đếm thời gian sẽ ngừng hoạt động cho đến khi cuộn xong bảng (điều này có thể là một vài giây chờ đợi!). Tôi nghĩ rằng tôi cần các chủ đề nền, nhưng giờ trên các chủ đề nền đã hơi phức tạp để thực hiện.

Câu trả lời cho vấn đề của tôi rất đơn giản và dễ dàng. Tôi chỉ cần thêm một dòng sau khi gọi hẹn giờ:

//////////// start the timer 

self.playingTimer = [NSTimer scheduledTimerWithTimeInterval:tempo target:self selector:@selector(playSoundFromArray:) userInfo:nil repeats:YES]; 

//////////// the magic line: 

[[NSRunLoop currentRunLoop] addTimer:self.playingTimer forMode:UITrackingRunLoopMode]; 

Bây giờ tôi có thể cuộn bảng nhiều như tôi muốn và bộ hẹn giờ của tôi hoạt động OK!

Bây giờ tôi cần nghiên cứu thêm một chút NSRunLoop ...

+0

Bạn thực sự nên đăng ở dạng câu hỏi, sau đó trả lời câu hỏi của riêng bạn. –

+0

Yup. Loại bỏ đoạn đầu tiên, sau đó bao gồm hai câu đầu tiên của câu thứ hai trong câu hỏi. Phần còn lại đi trong câu trả lời. Tôi muốn upvote cả hai. –

+0

Cảm ơn bạn đã đề xuất. Đây là cảng đầu tiên của tôi ở đây. Tôi không được phép trả lời các câu hỏi của riêng mình trong khoảng 8 giờ ... – alvira

Trả lời

1

Bạn nên thêm bộ hẹn giờ của mình cho chế độ NSDefaultRunLoopMode. UITrackingRunLoopMode được sử dụng bằng cách theo dõi các hành động UI (trong trường hợp cuộn của bạn).

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