Objective C:比较CGPoints

13

我正在尝试为我的CGPoints编写if-else语句,我应该如何实现?我尝试了这段代码...

if (point1 != point2)
{
       //statement
}

我遇到了这个错误

Invalid operand for binary expression...

谢谢!


1
point1和point2是用户定义类型(结构体)的操作数,!=是一个运算符。编译器在操作数类型上感到困惑,因为编译器只能接受指针类型和int、float、char等作为操作数。 - iOSPawan
4个回答

47

尝试使用函数CGPointEqualToPoint代替。

if (!CGPointEqualToPoint(p1,p2))
{
  //statement
}

这也适用于在特定区域放置物品吗?因为我也会将其用作示例 :) - Ramiro
@Ramiro - 请阅读我答案中包含的CGGeometry参考链接。它应该可以回答许多类似的问题。 - bryanmac

8

以下是您可以做的事情:

if (!CGPointEqualToPoint(point1, point2)) {
....
}

浮点数(因此CGFloat)有些棘手,因为有时您希望它们被视为相等,但它们可能存在微小的差距。如果您想进行“模糊”比较,可以尝试以下方法:

if (fabsf(point1.x - point2.x) > 0.0001f || fabsf(point1.y - point2.y) > 0.0001f) {
...
}

这个检查函数用于判断点point1和point2的x和y坐标分量是否不同,判断标准是它们之间的差值是否大于0.0001(这个数值完全是主观的,可以根据你所需的精度进行调整)。


7
我建议使用以下函数(来自苹果文档): CGPointEqualToPoint:返回两个点是否相等。
bool CGPointEqualToPoint (CGPoint point1, CGPoint point2);

参数

point1 : 要检查的第一个点。

point2 : 要检查的第二个点。

返回值 如果两个指定的点相同,则为 true;否则为 false。

更多信息请参阅: CGGeometry 参考文献


5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接