Swift - UIPanGestureRecognizer, выбирающий все слои, когда требуется только верхний слой

В том же пакете, где объявлен защищенный член, разрешен доступ:

package package1;

public class C extends A{
    public void go(){
        A a = new A();
        System.out.println(a.protectedInt);  // got printed 
        C c = new C();
        System.out.println(c.protectedInt);  // got printed as well
    }
}

Вне пакета, в котором объявлен защищенный член, доступ разрешен тогда и только тогда, когда по коду, который отвечает для реализации этого объекта. В этом случае C отвечает за реализацию этого объекта, поэтому он может получить доступ к защищенным.

package package2;

public class C extends A{
    public void go(){
        A a = new A();
        System.out.println(a.protectedInt);  // compiler complains  
        C c = new C();
        System.out.println(c.protectedInt);  // got printed
    }
} 
1
задан STerrier 6 March 2019 в 01:09
поделиться

2 ответа

A UIView имеет свойство, называемое subViews, где элементы с более высокими индексами находятся перед элементами с более низкими индексами. Например, subView с индексом 1 находится перед subView с индексом 0.

При этом, чтобы получить кнопку сверху, вы должны отсортировать buttonArray так же, как организовано свойство subViews из UIView. Предполагая, что все ваши кнопки - это братья и сестры одного и того же UIView (это может быть не обязательно так, но вы можете настроить их так, чтобы они правильно сортировались):

var buttonArray = view.subviews.compactMap { [110] as? UIButton }

Таким образом, сохраняя ваш [117 ] отсортировано таким образом, вы хотите кнопку, которая содержит let point = sender.location(in: button) с более высоким индексом в массиве.

0
ответ дан paivaalan 6 March 2019 в 01:09
поделиться

Есть способ прогуляться. Похоже, что вы просто хотите, чтобы ваш жест оказался на одну кнопку выше всех остальных, добавив var вне цикла и каждый раз, когда нажимали кнопку, сравнивая с var ее уровня в точке z.

case .ended:
        var pickedButton: UIButton?
        for button in buttonArray {
            let point = sender.location(in: button)

            if button.layer.contains(point){
                if pickedButton == nil {
                    pickedButton = button
                } else {
                    if let parent = button.superView, parent.subviews.firstIndex(of: button) > parent.subviews.firstIndex(of: pickedButton!) {
                        pickedButton = button
                    }
                }
            }
        }
        //DO my Action with pickedButton here
        lineShape.path = nil
        lineShape.removeFromSuperlayer()
0
ответ дан LiLi Kazine 6 March 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: