0

我想在名为SettingsViewer的子类 NSView 的右上角绘制一个 160x160 的圆圈。我必须承认我在这个绘图行业中很新;(虽然我之前做过一些绘图,这与我现在所做的完全不同,但更复杂的是我这次遇到了一个问题。

我将我的 SettingsViewer 链接到IBOutlet SettingsViewer *myView; 在我的 SettingsViewer.h 中通过使用按钮进行测试来绘制这个圆圈。

我要做的第一件事是找出我的视图区域的边界,如下所示:

NSRect circleBounds = myView->_frame;

这就是我之前所做的,并且效果很好。但在这里我得到了正确的宽度值和一个奇怪的高度值:

调试器信息 高度应为 407。

任何线索为什么我得到这个错误的值?

罗纳德霍夫曼

4

2 回答 2

1

为什么当我在 IBAction 中使用它时这不起作用?

因为你知道你有一个有效的绘图上下文的唯一时间是在 drawRect 方法中。如果 IBAction 需要更新视图,它应该使用 [theView setNeedsDisplay:YES]。

于 2012-11-17T07:13:55.927 回答
1

您可以覆盖-drawRect:

-(void)drawRect:(NSRect)rect
{
    CGRect bounds = self.bounds ;
    NSBezierPath * path = [ NSBezierPath bezierPathWithOvalInRect:(NSRect){ 
        { CGRectGetMaxX( bounds ) - 160.0f, CGRectGetMaxY( bounds ) - 160.0f }
        , { 160.0f, 160.0f } 
    } ] ;
    [ path stroke ] ;
}
于 2012-11-17T05:17:39.550 回答