是否有一种神奇的方法接受两个视图并返回彼此之间的距离(可能是x和y距离)?或者这是必须手动完成的事情吗?如何检测UIView视图与其他UIView的接近程度?
1
A
回答
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()可以帮助你很多。
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。
相关问题
- 1. UIView模糊其他视图
- 2. 如何让uiview高于其他视图
- 3. 检测某些UIView是否在其他UIView中被触及
- 4. 从其他视图访问UIView的textview
- 5. 其他视图无法工作的UIView
- 6. 的UIView animateWithDuration与其他CGRectMake
- 7. UIView只在其他视图上投影
- 8. 检测UIView是否与其他UIViews相交
- 9. XCUITest检测的UIView
- 10. touchesMoved的UIView检测
- 11. UIGestureRecognizer下其他UIView
- 12. UIView位置检测
- 13. 检测UIView修改
- 14. Swift:如何检测UIView中的元素?
- 15. 如何为其他视图的其余部分实现通用背景UIView?
- 16. 如何在程序上在其他UIView对象上添加一个UIView对象?
- 17. UIView的加载其它视图
- 18. UIView指标的进度视图
- 19. 如何为表格视图设置背景图片和其他类别的UIView
- 20. 插入UITableViewController到其他UIView
- 21. 将其他视图的标签添加到UIView
- 22. iOS:加载其他视图控制器的uiview
- 23. UIScrollView高度与UIView高度
- 24. UIView - 动画视图
- 25. 检测的UIView子视图的触摸使用CAAnimation
- 26. UIView在其超级视图内移动
- 27. UIView initWithFrame覆盖视图高度
- 28. UIView和子视图 - 不透明度
- 29. UIView表视图标题宽度错误
- 30. 与子子视图的UIView动画
这是不对的。为什么你会通过视图顶部边缘的差异来提高视图左边缘的差异? –
你是对的邓肯。抱歉。我只是编辑答案。谢谢 – Igor
伊戈尔,即使这种做法是不正确的。您始终计算两个框架左边缘之间的距离以及两个框架顶部之间的距离。问题比这更复杂。如果2帧在1维上重叠,则答案将是仅在1维中的近边之间的线性距离。只有当两个视图之间的两个视图之间有空白时,您才需要计算毕达哥拉斯距离,然后您需要计算出最近的角落。查看我的帖子,了解如何解决问题的大纲。 –