2012-05-14 3 views
0

Я хочу:
1) 4 головоломки изображения в UIImageViews, которые я могу передвигаться 2) после решения головоломки я хочу показать 2 изображения вместо головоломки: первый раз после того, как головоломки решаются, второй 2 секунды после первого изображения ...Как отменить уже выпущенный не повторяющийся NSTimer?

Что у меня есть:
1) если вы решаете действительно быстро одну головоломку за другой, вы можете попасть в интервал NSTimer, который обменяет эти 2 изображения слишком быстро, как после 0,1 с не 2,0

Есть ли способ решить N STimer, чтобы не мешать уже уволенному?

Решение (?): Я думал о блокировке взаимодействия, поэтому появится второе изображение, но это похоже на плохой обходной путь.

+1

Почему вы хотите отменить уже уволенный, не повторяющийся NSTimer? Это уже сделало свою работу? – trapper

ответ

2

Вы должны хранить ссылку на этот таймер (как свойство или как iVar).

Затем просто позвоните [myTimer invalidate]; myTimer = nil;, если вы хотите отменить его.

EDIT:

Если вы не сохраняя ссылку на свой таймер (если вы создаете его с нуля внутри блока кода) всегда есть опасность создания нескольких экземпляров ...

+0

не означает, что неповторяющиеся таймеры являются самоуничижительными после их обстрела? – raistlin

+0

Трудно сказать больше, не видя кода. Но ваша оригинальная идея (блокирование взаимодействия с пользователем) не является плохим решением проблемы, хотя это может раздражать пользователей. –

+0

ну, я вернулся к недействительности и сохранил его в ivar, это отладка, но я должен проверить, не работают ли новые/старые таймеры друг с другом. – raistlin

1

Написать метод сеттер , Как это. Всякий раз, когда вам нужно отменить таймер

self.myTimer = nil; 

- (void)setMyTimer:(NSTimer *)inTimer 
{ 
    if (inTimer != mMyTimer) 
    { 
    [mMyTimer invalidate]; 
    [mMyTimer release]; 
    mMyTimer = [inTimer retain]; 
    } 
} 

Надеюсь, что это может сработать для вас.

Смежные вопросы