2011-04-01 44 views
1

需要問題幫助。在iOS上使用多個NSTimers - 只有一個定時器觸發

目標
我放在一起使用NSTimers加載視圖後斷火幾個交錯動畫事件在iOS應用程序的書。我創建了一個MethodCallerWithTimer類來幫助我做到這一點(代碼在底部)。

我的解決方案到目前爲止
當我使用MethodCallerWithTimer類,我分配objectOwningMethod爲我UIViewController子類對象(這是一本書頁),然後一種方法,在這個類的一個實例方法。這是我給你的方法的例子 - 很簡單的屏幕上的一些藝術作品轉向:

- (void) playEmory { 
    [emoryRedArt setHidden:NO]; 
} 

我的問題
當我創建多個MethodCallerWithTimer實例,然後加載視圖並啓動所有這些,我只有得到FIRST事件纔會發生。其他計時器都不會調用它們的目標方法。我懷疑我不明白我要求NSRunLoop做些什麼或類似的事情。

有什麼想法?

這是我MethodCallerWithTimer類:

@interface MethodCallerWithTimer : NSObject { 
    NSTimer * timer; 
    NSInvocation * methodInvocationObject; 
    NSNumber * timeLengthInMS; 
} 

- (id) initWithObject: (id) objectOwningMethod AndMethodToCall: (SEL) method; 
- (void) setTime: (int) milliseconds; 
- (void) startTimer; 
- (void) cancelTimer; 

@end 

與實現

#import "MethodCallerWithTimer.h" 

@implementation MethodCallerWithTimer 

- (id) initWithObject: (id) objectOwningMethod AndMethodToCall: (SEL) method { 
    NSMethodSignature * methSig = [[objectOwningMethod class] instanceMethodSignatureForSelector:method]; 
    methodInvocationObject = [NSInvocation invocationWithMethodSignature:methSig]; 
    [methodInvocationObject setTarget:objectOwningMethod]; 
    [methodInvocationObject setSelector:method]; 
    [methSig release]; 
    return [super init]; 
} 
- (void) setTime: (int) milliseconds { 
    timeLengthInMS = [[NSNumber alloc] initWithInt:milliseconds]; 
} 
- (void) startTimer { 
    timer = [NSTimer scheduledTimerWithTimeInterval:([timeLengthInMS longValue]*0.001) invocation:methodInvocationObject repeats:NO]; 
} 
- (void) cancelTimer { 
    [timer invalidate]; 
} 
-(void) dealloc { 
    [timer release]; 
    [methodInvocationObject release]; 
    [timeLengthInMS release]; 
    [super dealloc]; 
} 

@end 

回答

4

這些看起來像一個延遲後一次性解僱;你有沒有考慮使用類似:

[myObject performSelector:@selector(playEmory) withObject:nil afterDelay:myDelay]; 

其中myObjectplayEmory常規的實例和myDelay是你想要的操作系統進行調用之前等待的秒數的float

你可以找到更多關於performSelectorhere這種味道的信息。

+0

偉大的建議,fbrereto。謝謝。這對我有效。我仍然很好奇,爲什麼我以前的實施沒有,但我應該能夠解決這個問題。 – mikedishere 2011-04-01 21:40:07

相關問題