NSTimer с методом делегата - PullRequest
       27

NSTimer с методом делегата

3 голосов
/ 29 января 2010

Я пытаюсь настроить NSTimer на делегате - я очень новичок в target-c, поэтому извиняюсь, если это не имеет особого смысла. Но то, что я написал, это:

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0 / 60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView) userInfo:nil repeats:TRUE];

К сожалению, это просто не работает. Может ли кто-нибудь указать мне правильное направление? Мой разум зажарился !!

Ответы [ 2 ]

4 голосов
/ 29 января 2010

Скорее всего, подпись метода для drawView неверна. Из справочника по классу NSTimer:

Сообщение, которое нужно отправить цели, когда Таймер срабатывает. Селектор должен иметь следующая подпись:

- (void)timerFireMethod:(NSTimer*)theTimer

Итак, ваш drawView метод должен выглядеть следующим образом:

- (void)drawView:(NSTimer*)theTimer
{
// Draw the view
}

Кроме того, исправьте ваш код следующим образом (обратите внимание на двоеточие после «drawView»):

animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0 / 60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView:) userInfo:nil repeats:TRUE];

Кстати, я не уверен, за что отвечает ваш drawView (я бы предположил нарисовать вид). Тем не менее, есть встроенные механизмы для рисования, которые должны соблюдаться (за исключением редких случаев). Обычно, если у вас есть NSView, вы вызываете setNeedsDisplay, что заставит пользовательский интерфейс сказать вашему NSView перерисовать себя, вызвав drawRect: вашего NSView. Я упоминаю об этом только потому, что вы сказали, что вы новичок в Objective-C, так что вы можете не знать об этом и в итоге написать больше кода, чем нужно. Если вы будете следовать этой схеме, вы можете периодически вызывать свой таймер setNeedsDisplay.

3 голосов
/ 29 января 2010

Вы правильно поняли.

Просто добавьте двоеточие в имя метода, т.е. @selector (drawView :). Кроме того, в соответствии с соглашением кодеры объектива-c используют YES и NO.

...