Ios 为什么CGRectInfinite和所有成员都设置为无穷大的CGRect之间存在差异?

Ios 为什么CGRectInfinite和所有成员都设置为无穷大的CGRect之间存在差异?,ios,objective-c,cgrect,infinity,Ios,Objective C,Cgrect,Infinity,在使用(无内容)SpriteKit节点时,我遇到了一个无限矩形 NSLog(@"%@", NSStringFromCGRect([node calculateAccumulatedFrame])); 哪个输出 {{inf, inf}, {inf, inf}} 我本想用CGRectIsInfinite检查这个问题,但是测试失败了,这导致我尝试下面的检查 CGRect rect = [node calculateAccumulatedFrame]; if (rect.origin.x == IN

在使用(无内容)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");
    }
}
它的输出:
我不明白
,这很好地概括了我现在的立场

正如
allestuetsmerweh
在回答中指出的那样,对于
CGRectInfinite
,函数确实返回true,当我输出这个矩形时,我得到

{{-8.9884656743115785e+307, -8.9884656743115785e+307}, {1.7976931348623157e+308, 1.7976931348623157e+308}}
(大小均为
DBL\u MAX

CGRectInfinite
是一个将某些值设置为DBL_MAX i.s.o.的矩形,一个将所有元素设置为
无限
的矩形,其背后的原因是什么?(当API返回CGRect时,所有成员都设置为无穷大)
或者更确切地说,为什么元素设置为
INFINITY
的矩形不注册为
CGRectIsInfinite

CGRect r = CGRectInfinite;
NSLog(@"%i", CGRectIsInfinite(r)); //prints "1"
从文档中:

无限矩形是没有定义边界的矩形。可以将无限矩形创建为平铺过滤器的输出。例如,核心图像框架透视图块过滤器创建一个图像,其范围由一个无限矩形描述

从文档中:

无限矩形是没有定义边界的矩形。可以将无限矩形创建为平铺过滤器的输出。例如,核心图像框架透视图块过滤器创建一个图像,其范围由一个无限矩形描述

CGRectInfinite是一个矩形,其中一些值设置为DBL_MAX i.s.o。一个所有元素都设置为无穷大的矩形,其背后的原因是什么

以下是一些猜测:

  • IEEE 754定义了两个无穷大(+∞ 及-∞). 必须选择一个(或者,
    CGRectInfinite
    的值不明确)
  • 无穷大不是一个真正的数字。当转换为字符串进行序列化时,这可能会导致各种问题
  • 在C中处理无穷大的值有点尴尬
  • 为什么元素设置为无穷大的矩形不注册为CGRectIsInfinite

    因为,正如预期的那样,
    CGRectIsInfinite
    将其参数与
    cgrectinifinite
    进行比较(在某些API中具有特殊含义,因此应该可以明确识别)

    CGRectInfinite是一个矩形,其中一些值设置为DBL_MAX i.s.o。一个所有元素都设置为无穷大的矩形,其背后的原因是什么

    以下是一些猜测:

  • IEEE 754定义了两个无穷大(+∞ 及-∞). 必须选择一个(或者,
    CGRectInfinite
    的值不明确)
  • 无穷大不是一个真正的数字。当转换为字符串进行序列化时,这可能会导致各种问题
  • 在C中处理无穷大的值有点尴尬
  • 为什么元素设置为无穷大的矩形不注册为CGRectIsInfinite


    因为,正如预期的那样,
    CGRectIsInfinite
    将其参数与
    CGRectInfinite
    进行比较(在某些API中具有特殊含义,因此应该可以明确识别).

    谢谢你的回答,我澄清了一点问题。谢谢你的回答,我澄清了一点问题。我明白你的意思,但是,为什么苹果的API选择返回一个所有成员都设置为无穷大而不是CGRectInfinite的rect呢?@Pieter所以你的问题真的很简单“为什么SpriteKit在
    CalculateAccumeratedFrame
    中使用的无限矩形与其他苹果API(如Core Image)不一致?”我想你可以这样说,或者“为什么SpriteKit引入了一种新的无限矩形,而苹果自己的函数CGRectIsInfinite并不认为它是无限的?”“我明白你的意思,但是,为什么苹果的API选择返回一个所有成员都设置为无穷大的rect而不是CGRectInfinite?@Pieter所以你的问题是“为什么SpriteKit在
    CalculateAccumeratedFrame
    中使用无穷大的rect与其他苹果API不一致,比如Core Image?”。我想你可以这样说,或者“为什么SpriteKit引入了一种新的无限矩形,而苹果自己的函数CGRectIsInfinite并不认为它是无限的?”