2013-10-22 49 views

回答

2

手动。只要没有变换应用于视图,编写一些可以计算2视图的框架矩形之间距离的代码就不那么困难。

想大声这里:

如果你不能得出在2次框架矩形之间的空间垂直和水平线,距离将是最近双方之间的距离x或y距离。

如果您可以在视图之间同时绘制水平线和垂直线(它们在x维或y维中不重叠),那么2个视图之间的距离将是它们之间最接近的毕达哥拉斯距离角落。

1

必须手动完成。

- (double)distance:(UIView*)view1 view2:(UIView*)view2 
{ 
     double dx = CGRectGetMinX(view2) - CGRectGetMinX(view1); 
     double dy = CGRectGetMinY(view2) - CGRectGetMinY(view1); 

     return sqrt(dx * dx + dy * dy); 
     or 
     return sqrt(pow(dx, 2) + pow(dy, 2)); 
} 

CGRectGetMinX()| CGRectGetMaxX()和CGRectGetMinY()| CGRectGetMaxY()可以帮助你很多。

+0

这是不对的。为什么你会通过视图顶部边缘的差异来提高视图左边缘的差异? –

+0

你是对的邓肯。抱歉。我只是编辑答案。谢谢 – Igor

+1

伊戈尔,即使这种做法是不正确的。您始终计算两个框架左边缘之间的距离以及两个框架顶部之间的距离。问题比这更复杂。如果2帧在1维上重叠,则答案将是仅在1维中的近边之间的线性距离。只有当两个视图之间的两个视图之间有空白时,您才需要计算毕达哥拉斯距离,然后您需要计算出最近的角落。查看我的帖子,了解如何解决问题的大纲。 –

4

为了得到你正在寻找神奇的方法,你应该写上的UIView类别:

double distance = [self distanceToView:otherView]; 

或两个视图之间:

// UIView+distance.h 
#import <UIKit/UIKit.h> 

@interface UIView (distance) 
-(double)distanceToView:(UIView *)view; 
@end 


// UIView+distance.m 
#import "UIView+distance.h" 

@implementation UIView (distance) 
-(double)distanceToView:(UIView *)view 
{ 
    return sqrt(pow(view.center.x - self.center.x, 2) + pow(view.center.y - self.center.y, 2)); 
} 
@end 

您可以像查看调用这个函数例如:

double distance = [view1 distanceToView:view2]; 

您还可以编写到最近边缘距离的类别等。上述公式只是两点之间的距离,我用了每个视图的中心。有关类别的更多信息,请参阅Apple docs