Программно передать прикосновения к UIScrollView для прокрутки - PullRequest
1 голос
/ 10 марта 2010

В основном я пытаюсь сделать прокрутку UIScrollView только на больших углах. Как и сейчас, если вы переместите палец на 10 градусов от горизонтали, прокрутка будет прокручиваться. Я хотел бы поднять это, скажем, до 30 градусов.

После некоторого чтения я установил, что лучший способ сделать это - поместить UIView с подклассами поверх вида прокрутки. Если касания UIView сверху превышают 30 градусов, передайте его в представление прокрутки, а в противном случае - нет.

Однако я не могу понять, как передать прикосновения вниз. Вот мой код прямо сейчас:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"glass touch began");
    UITouch *touch = [touches anyObject];
    beginning_touch_point = [touch locationInView:nil];
    [scroll_view touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"glass touch ended");
    UITouch *touch = [touches anyObject];
    CGPoint previous_point = beginning_touch_point;
    CGPoint current_point = [touch locationInView:nil];

    float x_change = fabs(previous_point.x - current_point.x);
    float y_change = fabs(previous_point.y - current_point.y);

    if(x_change > y_change)
    {
        if(previous_point.x - current_point.x < 0)
        {
            [(MyScheduleViewController *)schedule_controller didFlickLeft];
        }
        else
        {
            [(MyScheduleViewController *)schedule_controller didFlickRight];
        }

        [scroll_view touchesCancelled:touches withEvent:event];
    }
    else 
    {
        [scroll_view touchesEnded:touches withEvent:event];
    }
}

Сейчас я знаю, что это проверка на 45 градусов, но это не главное. Что важно, так это то, что касания действительно правильно передаются моему scroll_view. У меня есть NSLog () на touchesbegan и touchesended, и он делает оба правильно. Это просто не прокрутка. Я беспокоюсь, прикосновения начались, и прикосновения закруглились, не может вызвать прокрутку. Кто-нибудь знает, что может, или что я делаю не так?

1 Ответ

0 голосов
/ 20 января 2011

Я тоже пытался сделать то же самое, но безуспешно. Кажется, что scrollView не обрабатывает touchesMoved / touchesBegan, но обрабатывает некоторые другие события, чтобы понять, что пользователь хочет прокрутить представление. Для меня решение состояло в том, чтобы определить значение сдвига и установить его явно как смещение содержимого scrollView. Выглядело это так (точного исходного кода у меня нет, этот код может работать некорректно):

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [touches anyObject];

    CGPoint curr = [touch locationInView: self];
    CGPoint offset = [scrollView contentOffset];

    [scrollView setContentOffset: CGPointMake(offset.x + (curr.x - prev.x), offset.y) animated:YES];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    prev = [[touches anyObject] previousLocationInView: self];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...