CGFloat或CGFloat *?

时间:2012-06-19 21:49:03

标签: objective-c ios xcode cocoa-touch uifont

我收到错误,我不明白如何解决。错误是:

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

该错误意味着什么,以及如何解决它的想法?

2 个答案:

答案 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,以便方法可以根据需要更新它。