使用(无内容)SpriteKit节点时,我碰到了无限长方形
NSLog(@"%@", NSStringFromCGRect([node calculateAccumulatedFrame]));
输出
{{inf, inf}, {inf, inf}}
我想用CGRectIsInfinite
来检查这个,但是测试失败了,这导致我尝试以下检查
CGRect rect = [node calculateAccumulatedFrame];
if (rect.origin.x == INFINITY && rect.origin.y == INFINITY &&
rect.size.width == INFINITY && rect.size.height == INFINITY) {
if (!CGRectIsInfinite(rect)) {
NSLog(@"I don't get it");
}
}
哪个输出:I don't get it
,它现在整齐地总结了我的立场。
正如allestuetsmerweh
在答案中指出的那样,函数确实对CGRectInfinite
返回true,当我输出这个矩形时我得到了
{{-8.9884656743115785e+307, -8.9884656743115785e+307}, {1.7976931348623157e+308, 1.7976931348623157e+308}}
(尺寸均为DBL_MAX
)
CGRectInfinite
背后的原因是一个矩形,其中一些值设置为DBL_MAX i.s.o.所有元素都设置为INFINITY
的矩形? (虽然API确实返回CGRect,所有成员都设置为INFINITY)
或者更确切地说,为什么没有将元素设置为INFINITY
的矩形注册为CGRectIsInfinite
?
答案 0 :(得分:3)
CGRect r = CGRectInfinite;
NSLog(@"%i", CGRectIsInfinite(r)); //prints "1"
来自文档:
无限矩形是没有定义边界的矩形。可以创建无限矩形作为平铺滤波器的输出。例如,Core Image框架透视图块过滤器创建一个图像,其范围由无限矩形描述。
答案 1 :(得分:1)
CGRectInfinite背后的原因是一个矩形,其中一些值设置为DBL_MAX i.s.o.一个矩形,所有元素都设置为INFINITY?
以下是一些猜测:
CGRectInfinite
)有不明确的值。为什么没有将元素设置为INFINITY的矩形注册为CGRectIsInfinite?
因为正如预期的那样,CGRectIsInfinite
将其参数与CGRectInfinite
进行比较(在某些API中具有特殊含义,因此应明确识别)。