我正在尝试在委托上设置NSTimer - 我对objective-c非常新,所以如果这没有多大意义,请道歉。但我写的是:
animationTimer = [NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)((1.0 / 60.0) * animationFrameInterval) target:self.delegate selector:@selector(drawView) userInfo:nil repeats:TRUE];
不幸的是,这不起作用。有人能指出我正确的方向吗?我的思绪已经炒了!!
答案 0 :(得分:4)
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
,这将导致UI通过调用NSView的drawRect:
告诉您的NSView重绘自己。我之前只提到过这个,因为你说你是Objective-C的新手,所以你可能没有意识到这一点,并最终编写了超出你需要的代码。如果您遵循此设计,您可以定期拨打setNeedsDisplay
定时器。
答案 1 :(得分:3)
你做得对。
只需在方法名称中添加一个冒号,即@selector(drawView :)。此外,根据惯例,objective-c编码器使用YES和NO。