diff --git a/globals/globals.ios.ts b/globals/globals.ios.ts index 0492a6e2d..a601e123b 100644 --- a/globals/globals.ios.ts +++ b/globals/globals.ios.ts @@ -1,7 +1,32 @@ /** * iOS specific global functions implementation. */ -export function setTimeout(callback: Function, milliseconds: number): void { +var timeoutCallbacks = {}; + +function createTimerAndGetId(callback: Function, milliseconds: number, shouldRepeat: boolean): number { + var id = new Date().getUTCMilliseconds(); + var target = Foundation.NSObject.extends({ tick: function (timer) { callback(); } }, { exposedMethods: { "tick:": "v@:@" } }); - Foundation.NSTimer.scheduledTimerWithTimeIntervalTargetSelectorUserInfoRepeats(milliseconds / 1000, new target(), "tick:", null, false); + var timer = Foundation.NSTimer.scheduledTimerWithTimeIntervalTargetSelectorUserInfoRepeats(milliseconds / 1000, new target(), "tick:", null, shouldRepeat); + + if (!timeoutCallbacks[id]) { + timeoutCallbacks[id] = timer; + } + + return id; +} + +export function setTimeout(callback: Function, milliseconds: number): number { + return createTimerAndGetId(callback, milliseconds, false); +} + +export function clearTimeout(id: number): void { + if (timeoutCallbacks[id]) { + timeoutCallbacks[id].invalidate(); + timeoutCallbacks[id] = null; + } +} + +export function setInterval(callback: Function, milliseconds: number): number { + return createTimerAndGetId(callback, milliseconds, true); }