У меня есть некоторые очень основные проблемы с изменением цвета / ширины линии при рисовании различных линий (предназначенных для диаграммы) с NSBezierPath. Следующий код должен прояснить, что я пытаюсь сделать:
#import "DrawTest.h"
@implementation DrawTest
- (id)initWithFrame:(NSRect)frameRect
{
NSLog(@"in 'initWithFrame'...");
if ((self = [super initWithFrame:frameRect]) != nil)
{
[self drawBaseline];
[self display]; // ...NO!
[self drawPlotline];
}
return self;
}
- (void)drawBaseline
{
NSRect windowRect;
int width, height;
windowRect = [self bounds];
width = round(windowRect.size.width);
height = round(windowRect.size.height);
theLineWidth=1.0;
[[NSColor grayColor] set];
// allocate an instance of 'NSBezierPath'...
path = [[NSBezierPath alloc]init];
// draw a HORIZONTAL line...
[path moveToPoint:NSMakePoint(0,height/2)];
[path lineToPoint:NSMakePoint(width,height/2)];
}
- (void)drawPlotline
{
theLineWidth=10.0;
[[NSColor redColor] set];
// draw a VERTICAL line...
[path moveToPoint:NSMakePoint(100,125)]; // x,y
[path lineToPoint:NSMakePoint(100,500)];
}
- (void)drawRect:(NSRect)rect
{
NSLog(@"in 'drawRect'...");
// draw the path line(s)
// [[NSColor redColor] set];
[path setLineWidth:theLineWidth];
[path stroke];
}
- (void)dealloc
{
[path release];
[super dealloc];
}
@end
Проблема, очевидно, заключается в том, что drawRect вызывается только ONCE (после запуска обоих методов), в результате чего все строки появляются в последнем установленном цвете и ширине линии. Я пытался вызвать [self display] и т. Д. В надежде заставить 'drawRect' перерисовать содержимое NSView между двумя вызовами метода, но безрезультатно.
Может кто-нибудь предложить базовую стратегию для достижения того, что я пытаюсь сделать здесь, пожалуйста? Любая помощь будет высоко ценится.