setNeedsDisplay不工作?

时间:2008-11-29 07:56:06

标签: objective-c cocoa drawing key-value-observing

我在简单的cocoa应用程序中重绘自定义视图时遇到问题。绘图基于一个由简单的NSSlider更改的参数。但是,虽然我实现了-setParameter:和-parameter方法并将滑块的值绑定到界面构建器中的该参数,但我似乎无法使自定义视图重绘自身。

重绘的代码是这样的:

- (void)setParameter:(int)newParameter {
  parameter = newParamter;
  NSLog(@"Updated parameter: %d", parameter);
  [self setNeedsDisplay:YES];
}

虽然视图没有重绘,但我确实收到了有关设置新参数的消息。欢迎任何想法!

4 个答案:

答案 0 :(得分:5)

通常的语法是:[self setNeedsDisplay:YES],虽然我认为这意味着同样的事情。您是在实施- (void)drawRect:(NSRect)rect方法,还是使用超类的drawRect:方法?

答案 1 :(得分:2)

对于在使用NSOpenGLView子类时遇到此问题的任何人,您可能忘记在[[self openGLContext] flushBuffer]末尾使用drawRect:

答案 2 :(得分:2)

有时候原因可能非常简单:文件所有者与UIView对象没有任何关联。即它的出口设置不正确。 使用IB,ctrl按钮和拖动方法:)

答案 3 :(得分:0)

在iOS 6中,没有这样的功能可以调用:setNeedsDisplay:YES。我遇到了同样的问题,并附带了这个解决方案:https://stackoverflow.com/a/15027374/1280800

希望它会有所帮助。