1
我想在不同的時間間隔翻頁10頁。我需要創建10個定時器來翻轉?或者我可以創建一個數組間隔並將它們插入到計時器中?我是以更簡單的方式做到這一點?Objective-C:通過不同的時間間隔翻頁
我想在不同的時間間隔翻頁10頁。我需要創建10個定時器來翻轉?或者我可以創建一個數組間隔並將它們插入到計時器中?我是以更簡單的方式做到這一點?Objective-C:通過不同的時間間隔翻頁
有很多方法可以做到這一點。這裏有一個:
這可能是一個很好的解決方案,如果你的間隔時間不規則和相距甚遠。如果它們間隔更均勻(例如,第一秒是兩秒,接下來是四秒),那麼你可以簡化這個設計。但是,我假設你只是想能夠傳遞一系列時間間隔,然後讓代碼完成所有的處理。
@implementation ViewController { NSArray *_multipleTimerInstances; }
- (void)multipleTimers:(NSArray *)durations { // Get rid of any timers that have already been created. [self mulitpleTimerStopAll]; NSMutableArray *newTimers = [NSMutableArray new]; // Create the new timers. [durations enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { // Each element of the durations array specifies the flip interval in seconds. double duration = [(NSNumber *)obj doubleValue]; // Schedule it. NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:duration target:self selector:@selector(multipleTimersFlip:) userInfo:[NSNumber numberWithInteger:idx] repeats:YES]; // Keep a reference to the new timer so we can invalidate it later, if we want. [newTimers addObject:timer]; }]; // We now have a new list of timers. _multipleTimerInstances = [newTimers copy]; } - (void)multipleTimersFlip:(NSTimer *)timer { NSInteger index = [timer.userInfo integerValue]; // The integer index corresponds to the index of the timer in the array passed // to the multipleTimers method. NSLog(@"Flip page for timer with index: %ld", (long)index); } - (void)mulitpleTimerStopAll { // Get rid of any timers that have already been created. for (NSTimer *timer in _multipleTimerInstances) [timer invalidate]; // And nil out the array, they're gone. _multipleTimerInstances = nil; }
[self multipleTimers:@[ @5.0, @10.0, @7.5 ]];
那將回叫multipleTimersFlip方法每隔5,7.5,和10秒。
記住調用multipleTimersStopAll可以在不需要它時停止所有這些操作。
您只需要一個定時器以任何頁面使用的最小時間間隔。然後在每個計時器事件上,檢查哪些頁面間隔已過期。 –
@johnelemans你能給我代碼示例嗎? –