1

我收到一个我不明白如何解决的错误。错误是:

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.pointSizemyFont是一个UIFont。我是这样设置的:UIFont *myFont = [UIFont systemFontOfSize:17.0];

该错误是什么意思以及有关如何修复它的任何想法?

4

2 回答 2

7

文档

actualFontSize 在输入上,指向浮点值的指针。返回时,此值包含用于呈现字符串的实际字体大小。

这意味着您必须通过引用变量来传递指针。为此,您可以使用 & 运算符&

例子:

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 个值。要获得多个结果,您可以传入指针以允许该方法设置其他结果。

于 2012-06-19T21:55:57.257 回答
3

actualFontSize参数应该是您传入的 CGFloat 的地址。如果该方法使用不同的字体大小,它将更改您传入的值,这就是您需要传递地址而不是值的原因。换句话说,您actualFontSize通过引用传递,以便该方法可以根据需要对其进行更新。

于 2012-06-19T21:56:16.857 回答