(iphone) я могу заставить UIScrollView распознавать только горизонтальное перетаскивание? - PullRequest
1 голос
/ 15 февраля 2011

Я использую способность отмены касания UIScrollView с помощью canCancelContentTouches.

Однако мне бы хотелось, чтобы просмотр uiscrollview пытался отменить касание при обнаружении горизонтального перетаскивания (не вертикального).

(Надеюсь, что решение будет доступно в

Спасибо

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011

Реализуйте UIScrollViewDelegate и затем используйте что-то вроде этого:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [scrollView setContentOffset: CGPointMake(0, scrollView.contentOffset.y)];
}

Другим способом было бы иметь UIScrollView, который меньше или равен размеру его родительского представления и с отключенным «Всегда отказов»горизонтальный».

1 голос
/ 13 мая 2011

Самый безопасный и самый успешный метод, который я нашел, чтобы ограничить движение представления прокрутки, это создать подкласс UIScrollView и переопределить setContentOffset: animated: и setContentOffset: методов (код ниже).

Преимущество переопределения этих методов заключается в том, что он напрямую изменяет запрошенный contentOffset до того, как какой-либо код UIKit начинает действовать на него, избегая любого изпобочные эффекты, которые могут возникнуть при изменении contentOffset в scrollViewDidScroll: или других UIScrollViewDelegate методах.

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated {
    // restrict movement to horizontal only
    CGPoint newOffset = CGPointMake(contentOffset.x, 0);
    [super setContentOffset:newOffset animated:animated];
}

- (void)setContentOffset:(CGPoint)contentOffset {
    // restrict movement to horizontal only
    CGPoint newOffset = CGPointMake(contentOffset.x, 0);
    [super setContentOffset:newOffset];    
}
0 голосов
/ 15 февраля 2011

Полагаю, я бы использовал метод scrollViewWillBeginDragging найден в UIScrollViewDelegate и внутри я мог бы контролировать, идет ли пользователь горизонтально или нет ...

scrollViewWillBeginDragging:

Сообщает делегату, когда представление прокрутки собирается начать прокрутку содержимого.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

Параметры

Scrollview

Объект просмотра прокрутки, который собирается прокрутить представление содержимого.

Обсуждение

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

Доступность Доступно в iOS 2.0 и более поздних версиях.

...