有最大CGFloat值的常量吗?
我需要创build一个CGSize来计算任意长度的任意文本的文本高度。 UIKit有这个不错的方法-sizeWithFont:constrainedToSize:和我的文本只限制在宽度,但不是在高度。
为此,我需要为高度设置最大可能的CGFloat。
有像“CGFloatMax”一样的常量吗?
CGGeometry定义:
#define CGFLOAT_MAX FLT_MAX
对于那些使用Swift 2的人,你应该使用:
CGFloat.max
对于那些使用Swift 3的人,你应该使用:
CGFloat.greatestFiniteMagnitude
请注意,当Swift 3出现时, CGFloat.max
被删除,如文档中所示 。
CGFLOAT_MAX
怎么CGFLOAT_MAX
?
一个CGFloat
只是一个float
所以你可以安全的使用<float.h>
FLT_MAX
。
编辑:正如其他人现在指出,它看起来像CGFLOAT_MAX
已经为您定义,所以你应该使用它的一致性,而不是FLT_MAX
,即使他们是在32位平台上的相同的事情。
我正在寻找一个最小 CGFloat值的Swift版本,如果你也在这里登陆;)那么这里是答案:
CGFloat.leastNormalMagnitude
这不是一个答案,而是我目前没有足够的评价。
我刚刚遇到了使用CGFLOAT_MAX的意外行为:在运行iOS 7.1.2的iPhone 5S(64位)设备上使用Xcode 5.1.1,以下代码:
CGFloat numRot = floorf(CGFLOAT_MAX / 360.0); NSLog(@"numRot = %.2f", numRot);
输出:
numRot = inf
而这个代码:
CGFloat numRot = floorf(FLT_MAX / 360.0); NSLog(@"numRot = %.2f", numRot);
正确输出:
numRot: 945228740662580166143622731901435904.00
我命令+点击CGFLOAT_MAX和Xcode带我到CoreGraphics框架CGBase.h文件与下面的macros定义:
# define CGFLOAT_MAX DBL_MAX
我命令+点击CGFloat和Xcode带我到同一个文件中的另一行:
typedef CGFLOAT_TYPE CGFloat;
然后我命令+点击CGFLOAT_TYPE,并跳转到这里的#define行:
#if defined(__LP64__) && __LP64__ # define CGFLOAT_TYPE double ...
所以,由于某种原因,我的CGFloatvariables应该是一个双精度型,但是当它被赋值为一个双精度值(例如CGFLOAT_MAX)时,它似乎是一个溢出。 据我可以告诉这个苹果文档页面指出使用%F与NSLog应该打印双人 – 请纠正我,如果这是错误的。
所有这一切,如果FLT_MAX适用于您的情况,您现在可能想要坚持,而不是CGFLOAT_MAX,特别是如果您依赖一个专门接受float参数而不是double或CGFloat的库。
CGSize size = CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX);
width = 0.0000000000000000000000000000000000000117549435,height = 3.40282347E + 38
在Swift 3.0中,你也可以使用CGFloat(FLT_MAX),特别是如果你想在其他情况下使用它,比如zIndex,CGFloat.greatestFiniteMagnitude将超出范围。