2 つの異なるサブクラスで重複している数行の描画コードがあります。この描画コードを独自のクラスに移動してから呼び出すと、呼び出されますdrawRect
が、画面に描画されることはありません。drawRect
2 つの異なる: メソッドでコードが重複するのを防ぐ正しい方法は何ですか?
詳細: と をサブクラス化してカスタム コントロールを作成していNSTableView
ますNSTableCellView
。私の描画コードはdrawRect
、これらのサブクラスの両方にある必要があります。
1 つのメソッドを宣言する NSObject のサブクラスを作成しました。実装は次のとおりです。
@implementation TNLChartDrawingExtras
- (void)drawDividersInRect:(NSRect)rect startingAtDate:(NSDate *)startDate withZoomFactor:(NSNumber *)zoomFactor {
float pos = 0;
NSDate *currentDate = [startDate copy];
while (pos < rect.size.width) {
//draw the vertical divider
NSBezierPath *linePath = [NSBezierPath bezierPathWithRect:NSMakeRect(pos, 0.0, 1.0, rect.size.height)];
[[NSColor colorWithCalibratedWhite:0.85 alpha:0.5] set];
[linePath fill];
//increment the values for the next day
currentDate = [NSDate dateWithTimeInterval:86400 sinceDate:currentDate]; // add one day to the current date
pos = pos + (86400.0/ [zoomFactor floatValue]);
}
}
NSTableView サブクラスで、このオブジェクトのプロパティを定義します。次に、awakeFromNib
このクラスのインスタンスを作成します。
- (void)awakeFromNib {
self.extras = [[TNLChartDrawingExtras alloc] init];
}
私はこのdrawRect:
メッセージを送ります:
- (void)drawRect:(NSRect)dirtyRect {
// more code here...
[self.extras drawDividersInRect:viewBounds startingAtDate:chart.startDate withZoomFactor:self.zoomFactor];
}
コードは実行されますが、描画されるはずの線が表示されません。drawDividersInRect:...
からのコードをdrawRect:
メソッドに入れると、正常に動作します。