在与其他 UIView 相交之间插入 UIView

Posted

技术标签:

【中文标题】在与其他 UIView 相交之间插入 UIView【英文标题】:Insert a UIView between intercecting other UIView(s) 【发布时间】:2012-07-13 20:44:20 【问题描述】:

我有一个包含 9 个 UIViews 的屏幕(想象 3x3 表和视图,每行 3 个视图)占据所有屏幕。 我拖动一个 UIView,然后移动它,然后我希望一旦 touchEnded 将其放置在其他拦截 UIView 之间的某个位置,并再次使用 UIViews 的 3x3 屏幕,当然现在使用拖动的 UIView 重新排序,我(不知何故)放它.

除了 UIView 的重新排序之外,一切都很好。我需要一种方法来找出我猜想与其他 UIView 最相交的地方(最大的区域在可拖动 UIView 框架所具有的所有 UIView 之间相交)并用新位置重新排列所有 UIView。

所有这些都发生在超级视图中,它拥有所有视图并具有带有 UIView 的 NSMutableArray。我不想移动列表中的对象,而是通过框架找到解决方案。

假设您在一张桌子上有 9 张牌,并在这个 3x3 网格中更改它们的位置。

谢谢。

【问题讨论】:

【参考方案1】:

只需使用 view.center 来确定该点是否与另一个视图相交。如果它们不重叠,则中心只会命中一个视图。您可以使用以下代码来获取相交视图中的点。

CGPoint centerInOtherView = [thisView convertPoint:thisView.center toView:otherView];

那么你可以用下面的代码测试交集。

if ([otherView pointInside:centerInOtherView withEvent:nil])
    // Do Something

此时您知道拖动视图的中心与您正在测试的视图一致

你也可以这样重新排列你的视图。

UIView *mySuperView = [thisView superview];
NSUInteger index = [[[mySuperView subviews] indexOfObject:otherView];
[thisView removeFromSuperview];
[mySuperView insertSubview:newView atIndex:index];

【讨论】:

我理解这种方法,但我无法正确定位,首先进入 if 条件非常困难,如果我尝试在可拖动视图结束时给出 otherView 的新帧值然后下一帧值到 otherView。但它很幸运...... 添加新代码。框架的设置由您决定。根据你的计算。您可能有一组框架,其中包含屏幕上每个项目的框架。或者你可能想要计算它。但至于按您想要的顺序添加它们。这段代码应该会有所帮助。 您是否正在测试不是您拖动的视图的父视图中的每个视图。

以上是关于在与其他 UIView 相交之间插入 UIView的主要内容,如果未能解决你的问题,请参考以下文章

Swift:UIView 与哪个方向相交?

Swift:如何判断 myView 与哪个 UIView(s) 相交?

向 UITableViewCell 的 UIView(背景视图)添加子层会覆盖其他单元格视图吗?

UIView的不透明alpha和背景颜色之间有什么关系?

堆叠的 UIView 层不移动

将 UIView 插入 UIToolbar