Обнаружение, когда один UIView в ontop другого
У меня есть:
myViewController
- подкласс UIViewController
myFirstView
- подкласс UIView
mySecondView
- подкласс UIView
внутри myFirstView
Я добавил UIView
объект называется myLittleView
как подпредставление myFirstView
окно (UIWindow) and added a
UIPanGestureRecognizer`, чтобы пользователь мог перетащить вид в окно.
Я также добавил 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];