2013-08-20 7 views
0

Я пытаюсь сделать простую программу какао. У меня есть маленький черный ящик (подкласс 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 вы заполняете границы обзора - это в поле зрения координат. Затем вы пытаетесь заполнить «остатки», они находятся в координатах наблюдения, но будут рассматриваться как координаты вида и, вне всякого сомнения, находятся за пределами видимости и поэтому будут обрезаны.

Попробуйте вместо этого иметь «бортовой» вид, заполняющий ваше окно, и ваш вид окна как подвид этого. Представление платы должно содержать и нарисовать список «остатков», «окно» при щелчке должно добавить его текущий кадр в список просмотров доски. Эти пребывания всегда будут в пределах доски.

HTH.