【发布时间】:2017-05-12 20:01:33
【问题描述】:
所以我收到了一条通知,其中包含我绘制路径所需的数据。此代码来自我的主应用控制器:
-(void) handleAdd:(NSNotification *)aNotification{
NSLog(@"x1:%f y1:%f x2:%f y2:%f ",[panelController x1],[panelController y1],[panelController x2],[panelController y2]);
myPath = [[NSBezierPath alloc]init];
[myPath setLineWidth:[panelController grosor]];
[myPath moveToPoint:NSMakePoint([panelController x1],[panelController y1])];
[myPath lineToPoint:NSMakePoint([panelController x2],[panelController y2])];
[[panelController trazado] setStroke];
[myPath stroke];
}
NSLog 向我显示了正确的数据。我创建了一个视图,并且在那个白色矩形中是我要绘制的位置。
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect
{
NSRect bounds= [self bounds];
[[NSColor whiteColor] set];
[NSBezierPath fillRect:bounds];
}
如果我在那个类中画笔画,那么我怎么能从控制器的那个视图上画呢?还是我应该只在视图中接收通知并从该类中绘制?
【问题讨论】:
-
所有绘图都必须发生在
-drawRect:内。所以在-handleAdd:上存储您的数据并将视图标记为需要显示:[myView setNeedsDisplay:YES];。最后,您需要为贝塞尔路径设置颜色。
标签: objective-c xcode cocoa interface-builder