所以我接收了一个通知,其中包含我需要绘制路径的数据。此代码来自我的主app控制器:
<td ng-repeat="d in data.sunday track by $index">{{ d.startTime }}</td>
NSLog正在向我显示正确的数据。我创建了一个视图,并且白色矩形是我想要绘制的地方。
-(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];
}
如果我在该类中绘制笔画显示,但我怎么能从控制器上绘制该视图?或者我应该只是在视图中收到通知并从该类中提取?
答案 0 :(得分:4)
您无法(轻松)从控制器绘制到视图中。
将您的观看drawRect
方法视为每次刷新时绘制内容的完整说明。
所以现在你所说的只是“用白色填充我”
您需要在视图drawRect:
方法中处理所有相关图形。
将控制器方法调整为此。
-(void) handleAdd:(NSNotification *)aNotification{
[myViewInstance setNeedsDisplay:YES]; //also myViewInstance.needsDisplay = YES
}
假设视图有对面板控制器的引用......
@interface MyView: UIView
//weak as you don't want a reference cycle
@property (weak) MyPanelController *panelController;
@end
@implementation MyView
- (void)drawRect:(NSRect)dirtyRect
{
NSRect bounds= [self bounds];
[[NSColor whiteColor] set];
[NSBezierPath fillRect:bounds];
NSBezierPath *myPath = [[NSBezierPath alloc]init];
[myPath setLineWidth:[self.panelController grosor]];
[myPath moveToPoint:NSMakePoint([self.panelController x1],[self.panelController y1])];
[myPath lineToPoint:NSMakePoint([self.panelController x2],[self.panelController y2])];
[[self.panelController trazado] setStroke];
[myPath stroke];
}
@end
如果您想探索第一种技术,请查看NSView
和lockFocus/unlockFocus
方法。该文档解释了为什么您可能不想这样做。