目标 C:比较 CGPoints
Posted
技术标签:
【中文标题】目标 C:比较 CGPoints【英文标题】:Objective C: Comparing CGPoints 【发布时间】:2012-01-12 05:55:18 【问题描述】:我正在尝试为我的 CGPoints 做一个 if-else 语句 我怎么能做到这一点,我试过这段代码......
if (point1 != point2)
//statement
我遇到了这个错误
Invalid operand for binary expression...
谢谢!
【问题讨论】:
point1 和 point2 是用户定义类型(结构)的操作数,!= 是运算符。这里编译器对操作数类型感到困惑,因为编译器只能接受指针类型和 int float char 等作为操作数。 【参考方案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:要检查的第二个点。返回值
如果两个指定的点相同,则为真;否则为假。
【讨论】:
以上是关于目标 C:比较 CGPoints的主要内容,如果未能解决你的问题,请参考以下文章