Обнаружение, когда один UIView в ontop другого

У меня есть:

myViewController - подкласс UIViewController

myFirstView - подкласс UIView

mySecondView - подкласс UIView

внутри myFirstView Я добавил UIView объект называется myLittleView как подпредставление myFirstViewокно (UIWindow) and added aUIPanGestureRecognizer`, чтобы пользователь мог перетащить вид в окно.

Я также добавил CGRect объект внутри myFirstView называется secondViewFrame это содержит кадр mySecondView рамка объекта

я добавил myFirstView а также mySecondView объект как подпредставление myViewControllerТочка зрения.

Теперь я хочу проверить, если myLittleView находится на вершине mySecondViewЯ пытался добавить этот код в UIPanGestureRecognizerЭто действие, но оно дало неправильный результат:

let pointInViewController = sender.translationInView(self.superview)
if self.secondViewFrame!.contains(pointInViewController) {
   print("Inside")
}

Любая идея, как я могу заставить это работать?

Спасибо!

2 ответа

То, что вы ищете, это пейзаж, в котором ваши UIView находятся в трехмерных координатах, одна перед другой, поэтому я предлагаю вам решить эту проблему с помощью системы трехмерных координат

@IBOutlet weak var myFirstView : UIView!

@IBOutlet weak var mySecondView : UIView!

Поскольку вы уже определили их координаты x и y, определив их рамку, для изменения их z-позиции используйте:-

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")
     }
- (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];
Другие вопросы по тегам