Контролировать UIScrollView вне границ?
Мне интересно, как я могу позволить пользователю прокручивать за пределами UIScrollView?
2 ответа:
Вы можете попробовать перенаправить события касания из различных методов UIView супервизора в scrollview и посмотреть, будет ли это работать. Например:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [scrollView touchesBegan:touches withEvent:event]; } // etc
Или вы можете попробовать использовать UIPanGestureRecognizer на superview и явно установить смещение вида прокрутки при получении событий панорамирования. Например:
- (void)handlePan:(UIPanGestureRecognizer *)pan { scrollView.contentOffset = [pan translationInView:scrollView]; } // Or something like that.
Попробуйте подклассы
UIScrollView
и переопределенияhitTest:withEvent:
так, чтобыUIScrollView
улавливает прикосновения за пределами своих границ. Что-то вроде этого:@interface MagicScrollView : UIScrollView @end @implementation MagicScrollView - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // Intercept touches 100pt outside this view's bounds on all sides if (CGRectContainsPoint(CGRectInset(self.bounds, -100, -100), point)) { return self; } return nil; } @end
Вам также может потребоваться переопределить
pointInside:withEvent:
на супервизореUIScrollView
, в зависимости от вашего макета.Смотрите следующий вопрос для получения дополнительной информации: взаимодействие за пределами uiview