objectivec-在NSView中调用绘制文本的方法时出错



下一个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:]内部调用这些方法,不是吗?

最新更新