【问题标题】:Insert a UIView between intercecting other UIView(s)在与其他 UIView 相交之间插入 UIView
【发布时间】: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 网格中更改它们的位置。

谢谢。

【问题讨论】:

    标签: objective-c uiview position


    【解决方案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。但它很幸运......
    • 添加新代码。框架的设置由您决定。根据你的计算。您可能有一组框架,其中包含屏幕上每个项目的框架。或者你可能想要计算它。但至于按您想要的顺序添加它们。这段代码应该会有所帮助。
    • 您是否正在测试不是您拖动的视图的父视图中的每个视图。
    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2014-07-06
    • 2011-04-20
    • 1970-01-01
    • 2014-08-13
    • 2012-07-20
    相关资源
    最近更新 更多