需要問題幫助。在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
偉大的建議,fbrereto。謝謝。這對我有效。我仍然很好奇,爲什麼我以前的實施沒有,但我應該能夠解決這個問題。 – mikedishere 2011-04-01 21:40:07