Меню UIView поверх UIScrollView

Хорошо, это должно быть простым заданием, но оно сводило меня с ума.

Все, чего я пытаюсь добиться, - это UIScrollView, который будет отображаться за статичными прозрачными панелями инструментов на боковой и нижней частях экрана. В настоящее время структура настроена таким образом, что scrollView (подкласс UIScrollView) и оверлей (подкласс UIView) являются подвидами RootViewController.

scrollView = [[EMDrawScrollView alloc]initWithFrame:CGRectMake(0, 0, winSize.width, winSize.height)];
scrollView.userInteractionEnabled = YES;
[self.view addSubview:scrollView]; 

overlay = [[EMDrawOverlayView alloc]initWithFrame:CGRectMake(0, 0, winSize.width, winSize.height)];
overlay.userInteractionEnabled = NO;
[self.view addSubview:overlay];

ПРОБЛЕМА заключается в том, что если я включаю overlay.userInteractionEnabled, все касания переходят на слой и не могут попасть в scrollView. Но если я отключаю взаимодействие с пользователем, scrollView работает правильно, но я не могу взаимодействовать с оверлеем.

Что касается обработки касаний, я собираю их с помощью RootViewController и отправляю их нужному объекту следующим образом:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *t1 = [[[event allTouches]allObjects]objectAtIndex:0];
    CGPoint loc = [t1 locationInView:self.view];
    if (CGRectContainsPoint(overlay.rightToolbar.frame, loc)) {
        overlayTouched = YES;
        [overlay touchesBegan:touches withEvent:event];  
    }  else {
        overlayTouched = NO;
        [scrollView touchesBegan:touches withEvent:event];
    }
}

У меня есть ощущение, что одним из исправлений будет установка панелей инструментов в качестве отдельных UIViews и добавление их в качестве подвидов в View Controller, чтобы наложение не занимало весь экран, но я бы хотел избежать этого, если есть другой способ.

1 ответ

Решение

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

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

Другие вопросы по тегам