Передача касаний через UIView в UIScrollView не работает - PullRequest
3 голосов
/ 27 марта 2009

У меня есть представление, полученное из контроллера UIScrollView, которое я использую для просмотра изображений в библиотеке. Это отлично работает.

Я наложил UIView на правую сторону, чтобы обрабатывать прикосновения для быстрой прокрутки списка изображений. Моя проблема в том, что если я передаю касания либо в «super», либо в «nextResponder», они никогда не попадают в объект UIScrollView, приведенный ниже.

У меня вопрос, как заставить приведенный ниже UIScrollView обрабатывать касания, которые мне не нужны? Я устанавливаю таймер на 0,3 секунды, чтобы за это время все касания передавались в UIScrollView для обработки. Так что, если пользователь начал жестом перелистывания, чтобы перевернуть страницу, это произойдет.

Вот код для метода touchesBegan:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];

// Start a timer to trigger the display of the slider and the processing of events.
touchesTimer = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(showSlider:) userInfo:nil repeats:NO];

// Where are we at right now?
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self.view];
lastPage = [self page:currentPoint.y];

// Pass the event though until we need it.
//  [self.nextResponder touchesBegan:touches withEvent:event];
if ([touch.view isKindOfClass:[UIScrollView class]]) 
{
    if (self.nextResponder != nil &&
        [self.nextResponder respondsToSelector:@selector(touchesEnded:withEvent:)]) 
    {
        [self.nextResponder touchesEnded:touches withEvent:event];
    }
}
}

Ответы [ 2 ]

1 голос
/ 13 июля 2012

Я бы попробовал использовать обычный UIViewController, а не UIScrollViewController, а затем добавить объект представления с прокруткой там, где он вам нужен, и поместить вид с более быстрой прокруткой с правой стороны. Таким образом, они будут отделены друг от друга, и прикосновения не запутаются.

0 голосов
/ 15 июля 2013

Вот более простые решения, которые хорошо сработали для меня:

В UIView в верхней части UIScrollview задайте для ширины и высоты значение 0 (чтобы технически представление больше не находилось поверх UIScrollView) и установите clipsToBounds = NO (чтобы содержимое представления по-прежнему отображалось на верхняя часть UIScrollView).

 self.OverlayView.clipsToBounds = NO;
 CGRect frame = self.OverlayView.frame;
 self.OverlayView.frame = CGRectMake(frame.origin.x, frame.origin.y, 0, 0);

Обратите внимание, что если UIView содержит интерактивные элементы управления, они больше не будут работать. Вам нужно переместить его в собственное представление над UIScrollView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...