我收到错误,我不明白如何解决。错误是:
Sending 'CGFloat' (aka 'float') to parameter of incompatible type 'CGFloat *' (aka 'float *');
对于行:
[xlabel.text drawAtPoint:CGPointMake(labelRect.origin.x, labelRect.origin.y)
forWidth:labelRect.size.width
withFont:myFont
minFontSize:5.0
actualFontSize:myFont.pointSize
lineBreakMode:UILineBreakModeWordWrap
baselineAdjustment:UIBaselineAdjustmentAlignCenters];
错误指向actualFontSize:myFont.pointSize
。 myFont
是UIFont
。我这样设置:UIFont *myFont = [UIFont systemFontOfSize:17.0];
该错误意味着什么,以及如何解决它的想法?
答案 0 :(得分:5)
来自docs:
actualFontSize输入时,指向浮点值的指针。上 return,此值包含用于的实际字体大小 渲染字符串。
这意味着您必须通过引用变量来传入指针。为此,请使用&符号运算符&
示例:
CGFloat outSize = 0;
[xlabel.text drawAtPoint:CGPointMake(labelRect.origin.x, labelRect.origin.y)
forWidth:labelRect.size.width
withFont:myFont
minFontSize:5.0
actualFontSize:&outSize
lineBreakMode:UILineBreakModeWordWrap
baselineAdjustment:UIBaselineAdjustmentAlignCenters];
NSLog(@"%f", outSize);
drawAtPoint:将设置outSize指向的值,以便您可以打印结果。 这里的原因是,你只能通过return语句在C中返回1个值。要获得多个结果,您可以传入指针以允许该方法设置其他结果。
答案 1 :(得分:3)
actualFontSize
参数应该是您传入的CGFloat的地址。如果该方法使用不同的字体大小,它将更改您传入的值,这就是您需要的原因传递地址而不是值。换句话说,您通过引用传递actualFontSize
,以便方法可以根据需要更新它。