比较两个 CGRect

Posted

技术标签:

【中文标题】比较两个 CGRect【英文标题】:Comparing two CGRects 【发布时间】:2012-10-13 22:12:39 【问题描述】:

我需要检查我的视图框架是否等于给定的 CGRect。我试着这样做:

CGRect rect = CGRectMake(20, 20, 20, 20);
if (self.view.frame == rect)

    // do some stuff

但是,我收到一条错误消息,提示 Invalid operands to binary expression('CGRect' (aka 'struct CGRect') and 'CGRect')。为什么我不能简单地比较两个CGRects?

【问题讨论】:

【参考方案1】:

使用这个:

if (CGRectEqualToRect(self.view.frame, rect)) 
     // do some stuff

【讨论】:

【参考方案2】:

请参阅the documentation 获取 CGRectEqualToRect()。

bool CGRectEqualToRect ( CGRect rect1, CGRect rect2 );

【讨论】:

【参考方案3】:

在 Swift 3 中它会是:

frame1.equalTo(frame2)

【讨论】:

事实上,equalTo(_:) 现在是deprecated 所以== 是首选。【参考方案4】:

在 Swift 中,只需使用 ==!= 运算符即可:

    let rect = CGRect(x: 0, y: 0, width: 20, height: 20)

    if rect != CGRect(x: 0, y: 0, width: 20, height: 21) 
        print("not equal")
    

    if rect == CGRect(x: 0, y: 0, width: 20, height: 20) 
        print("equal")
    

调试控制台打印:

not equal
equal

【讨论】:

以上是关于比较两个 CGRect的主要内容,如果未能解决你的问题,请参考以下文章

如何从 CGPoint 和 CGSize 创建 CGRect?

CGRect Contains Point 不适用于不同的视图

iOS 自定义视图 - 使用 CGRect.zero 初始化 - 约束警告

自定义button

合并两个 UIImage 时收到内存警告

绘制透明圆弧