CGRectContainsRect有时不是wotking

时间:2015-11-25 07:21:36

标签: ios

我遇到了这个方法的问题。我在storyboard中添加了三个视图。如下所示:

enter image description here

然后我写了一些代码:

if (CGRectContainsRect(self.redView.frame,self.blueView.frame)) { 
    NSLog(@"redView contain blueView!");
} else {
    NSLog(@"redView not contain blueView!");       
}

if (CGRectContainsRect(self.redView.frame,self.yellowView.frame)) {
    NSLog(@"redView contain yellowView!");
} else {
    NSLog(@"redView not contain yellowView!");   
}

NSLog(@"%@ %@ %@",NSStringFromCGRect(self.redView.frame),NSStringFromCGRect(self.blueView.frame),NSStringFromCGRect(self.yellowView.frame));
 {{36, 74}, {240, 260}} {{8, 8}, {120, 120}} {{112, 135}, {120, 120}}

但结果是:redView不包含blueView! redView包含yellowView! 我只是想知道为什么redView不包含blueView?

1 个答案:

答案 0 :(得分:0)

示例中的坐标显示蓝框实际上不包含在红框中。这可能是因为观点并不共享同一个超级视图。看起来蓝色视图是红色视图的子视图。

你必须确保......

  • 测试后的视图位于同一视图中。
  • 或者在测试之前将它们的帧转换为相同的坐标系。

如何转换rects:

CGRect yellowRect = [self.yellowView convertRect:self.yellowView.bounds
                                          toView:self.redView];
if (CGRectContainsRect(self.redView.bounds, yellowRect)) {
    ...