下一个noob问题是……我必须在视图中绘制大量文本,我认为写一个更容易的方法是个好主意。这个代码在我看来:
- (void)drawText: (NSString*) tdString : (NSString*) schrift : (unsigned char) r : (unsigned char) g : (unsigned char) b :
(int) tsize : (int) xpos : (int) ypos;
{
NSPoint textPoint = NSMakePoint(xpos, ypos);
NSMutableDictionary *textAttrib = [[NSMutableDictionary alloc] init];
[textAttrib setObject:[NSFont fontWithName:schrift size:tsize] forKey:NSFontAttributeName];
[textAttrib setObject:[NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0]forKey:NSForegroundColorAttributeName];
[tdString drawAtPoint:textPoint withAttributes:textAttrib];
}
- (void)drawBPM
{
NSString *bpmString = [NSString stringWithFormat:@"%d", bpm];
NSString *tbpmString = [NSString stringWithFormat:@"%d", mbpm];
if (bpm < 100){ drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
if (bpm > 99 && bpm < 110){ drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
if (bpm > 109 && bpm < 200){drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
if (bpm > 199){ drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
}
在编辑器中,我收到警告"C99中函数‘drawText’的隐式声明无效"。运行时,我收到一个错误:"找不到体系结构x86_64的符号Linker命令失败,退出代码为1"。很明显,以前必须问这个问题,但我就是想不出来。谢谢!
"C99中函数'drawText'的隐式声明无效"的警告是因为您尚未在@interface
中声明该方法。
您也错误地定义了方法,它应该是(换行是可选的,但这是个好主意):
- (void)drawText:(NSString*)tdString
schrift:(NSString*)schrift
r:(unsigned char)r
g:(unsigned char)g
b:(unsigned char)b
tsize:(int)tsize
xpos:(int)xpos
ypos:(int)ypos;
(请注意,颜色和位置应该使用CGFloat
,而不是整数)。
然后它需要被调用为Objective-C方法,而不是C方法:
[self drawText:bpmString
schrift:@"Helvetica Light"
r:140
g:140
b:140
tsize:36
xpos:100
ypos:100];
最后,您正在从[NSView drawRect:]
内部调用这些方法,不是吗?