【问题标题】:Objective C: Comparing CGPoints目标 C:比较 CGPoints
【发布时间】:2012-01-12 05:55:18
【问题描述】:

我正在尝试为我的 CGPoints 做一个 if-else 语句 我怎么能做到这一点,我试过这段代码......

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

我遇到了这个错误

Invalid operand for binary expression...

谢谢!

【问题讨论】:

  • point1 和 point2 是用户定义类型(结构)的操作数,!= 是运算符。这里编译器对操作数类型感到困惑,因为编译器只能接受指针类型和 int float char 等作为操作数。

标签: iphone objective-c ios ipad if-statement


【解决方案1】:

尝试改用函数CGPointEqualToPoint

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

【讨论】:

  • 这也适用于在特定区域放置物品吗?因为我也会在那个例子中使用它。:)
  • @Ramiro - 阅读我在答案中包含的 CGGeometry 参考链接。它应该很多这类问题。
【解决方案2】:

你可以这样做:

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

浮点数(以及因此 CGFloats)有点棘手,因为有时您希望它们被视为相等,但它们的差距很小。如果你想要一个“模糊”的比较,你可以这样做:

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

这会检查 point1 和 point2 的 x 和 y 分量是否相差大于 0.0001(一个完全任意的数字,可以是任何你想要的,取决于你想要的精度)。

【讨论】:

    【解决方案3】:

    我建议使用以下功能:(来自 Apple Docs)

    CGPointEqualToPoint返回两点是否相等。

    bool CGPointEqualToPoint (CGPoint point1, CGPoint point2);
    

    参数

    point1 :要检查的第一个点。

    point2 :要检查的第二个点。

    如果两个指定的点是 相同的;否则为假。

    更多信息请阅读:CGGeometry Reference

    【讨论】:

      【解决方案4】:

      参见CGPointEqualToPoint:返回两点是否相等。

      bool CGPointEqualToPoint (
         CGPoint point1,
         CGPoint point2
      );
      

      http://developer.apple.com/library/mac/#DOCUMENTATION/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

      参数

      • point1:要检查的第一个点。
      • point2:要检查的第二个点。

      返回值

      如果两个指定的点相同,则为真;否则为假。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多