2013-08-20 31 views
0

我正在嘗試製作一個簡單的Cocoa程序。我有一個小黑框(NSView的一個子類,在屏幕上繪製NSRect)跟隨着我的鼠標。那部分我有工作。我需要做的是:當我點擊鼠標時,我想在後面留下黑盒的「副本」。不顯示NSRects的副本

我一直試圖讓這個工作超過五個小時,我已經嘗試了一切在陽光下。我相信解決方案很簡單,我的猜測是我錯過了對基本概念的理解。

這裏是我(一個「留」應該是留下的複印件):

@property NSMutableArray *stays; 

... 

- (void) makeStay { 
    if (!_stays) 
     _stays = [[NSMutableArray alloc]init]; 

    NSValue *newStay = [NSValue valueWithRect:self.frame]; 
    [_stays addObject:newStay]; 
} 

... 


-(void)drawRect:(NSRect)rect { 
    [[NSColor blackColor] set]; 
    NSRectFill([self bounds]); 

    for (int x = 0; x < _stays.count; x++) { 
     NSRectFill([_stays[x] rectValue]); 
    } 
} 

如何理解的NSView的基本面使得該會工作的任何幫助,將不勝感激!

回答

1

從你的代碼我猜你的問題是有限的。

它看起來像你有一個NSView,你正在屏幕上移動 - 所以它的框架是它在超視圖中的位置,這就是你在makeStay保存的內容。

在你的drawRect你填寫視圖的邊界 - 這是在視圖座標。然後嘗試填充「保留」,這些保留在超視圖座標中,但將被視爲視圖座標,無疑位於視圖邊界之外,因此將被剪裁。

嘗試改爲使用「board」視圖填充您的窗口,並將box視圖作爲子視圖填充。板視圖應該保留並繪製「停留」列表,單擊「框」視圖時應該將其當前幀添加到板視圖列表中。那些停留將永遠在董事會的邊界。

HTH。

相關問題