2012-11-17 35 views
0

我想在一個名爲SettingsViewer的簡化NSView的右上角畫圓圈160x160。我必須承認,我在這個繪畫行業中很新穎;(雖然之前我做過一些繪畫,但與現在我所做的完全不同,但更復雜,我這次有一個問題。聯繫我SettingsViewer到IBOutlet中SettingsViewer * MyView的;我SettingsViewer.h通過使用按鈕進行測試,以得出這個圈子NSView_frame的值錯誤Objective-C

我做的第一件事就是找出我喜歡這個觀點區域的邊界。

NSRect circleBounds = myView->_frame; 

That's我做了什麼之前,它工作得很好。但在這裏,我得到個Ë正確的值寬度和高度爲一個奇怪的值:

Debugger Info 高度應爲407

任何線索,爲什麼我得到這個錯誤的值?

羅納德·霍夫曼

回答

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 ] ; 
} 
+0

如果您希望您的圈子爲160x160,請忽略您的視圖框架。另外,在視圖中,您的繪圖畫布/座標由邊界給出。框架指示其超視圖中視圖的範圍。 – nielsbot

+0

>框架指示在其超級視圖中的視圖的範圍:Aha 我做了一些更多的測試,並發現當我添加此行時:circleBounds = myView - > _ bounds; 我正在獲取正確的值。 –

+0

精彩;))))的作品像一個魅力 –

1

爲什麼沒有當我使用它在IBAction爲這項工作?

因爲你知道你有一個有效的繪圖上下文的唯一時間是在drawRect方法。如果一個IBAction需要更新一個視圖,它應該使用[theView setNeedsDisplay:YES]。

+0

是的,我發現這就是我在第一次繪畫體驗中所做的。 –