检测一个UIView在另一个人的ontop上

时间:2016-08-31 14:01:09

标签: ios iphone swift cocoa-touch uiview

我有一个:

myViewController - UIViewController

的子类

myFirstView - UIView

的子类

mySecondView - UIView

的子类

myFirstView内部我添加了一个名为UIView的{​​{1}}对象作为myLittleView窗口(myFirstView UIPanGestureRecognizer`的子视图,以便用户可以拖动窗口中的视图。

我还在UIWindow) and added a内添加了一个名为CGRect的{​​{1}}对象,其中包含myFirstView对象框架的框架。

我已将secondViewFramemySecondView个对象添加为myFirstView视图的子视图。

现在我想检查mySecondView是否位于myViewController之上,我试图将此代码添加到myLittleView的操作中但是它给出了错误的结果:

mySecondView

我知道如何让它发挥作用?

谢谢!

2 个答案:

答案 0 :(得分:0)

- (void)listSubviewsOfView:(UIView *)view {

            // Get the subviews of the view
            NSArray *subviews = [view subviews];

            // Return if there are no subviews
            if ([subviews count] == 0) return; // COUNT CHECK LINE

            for (UIView *subview in subviews) {

                // Do what you want to do with the subview
                NSLog(@"%@", subview);

                // List the subviews of subview
                [self listSubviewsOfView:subview];
            }
        }

您可以对其进行一些修改,以检查视图是否包含带标记的子视图。

使用标记进行更新

初始化secondView时设置标记:

 [mySecondView setTag:10];

然后使用此方法:

- (void)checkIfView:(UIView *)view isParentOfViewWithTag:(NSInteger)tag {

    // Get the subviews of the view
    NSArray *subviews = [view subviews];

    // Return if there are no subviews
    if ([subviews count] == 0) return; // COUNT CHECK LINE

    for (UIView *subview in subviews) {

        if ([subview tag]==tag) {
            //Do something
            NSLog(@"The view is parent of the view with tag 10");
            break;
        }

        [self listSubviewsOfView:subview];
    }
}

在你的代码上:

[self checkIfView:myLittLittleView isParentOfViewWithTag:10];

答案 1 :(得分:0)

你正在寻找的是你的 UIView 在3D坐标中的风景,一个在另一个前面,所以我建议你用3D坐标系统解决这个问题

@IBOutlet weak var myFirstView : UIView!

@IBOutlet weak var mySecondView : UIView!

您已经通过定义框架来定义 x y 坐标,以便更改 z-position 使用: -

mySecondView.layer.zPosition = 0   //Second view on top
myFirstView.layer.zPosition = -1   //First view behind your mySecondView

每当您想要更改各自的位置时,只需为这两个值交换.zPosition值。

检查他们的相对位置: -

  if mySecondView.layer.zPosition == 0 {
      print("secondView is on the top of firstView")
        }else{
      print("firstView is on the top of secondView")
     }