Контролировать UIScrollView вне границ?


Мне интересно, как я могу позволить пользователю прокручивать за пределами UIScrollView?

2 3

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