I've got a view that has two subviews:
The scrollview is on top of Subview A and has the full device width/height. I want the user to be able to interact - through the transparent regions - with all those buttons and gesture reconizers below the scrollview, while still being able to scroll (so passing on the hittest is out).
Seems like an easy enough task, but I can't get it to work. The scrollview is always blocking all touches.
Any idea how I would accomplish that? Thanks!
You should subclass the UIScrollView and overwrite the following method:
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
If this method returns NO the scrollview will be "transparent" for touch events.
As you want the scrollview to be "transparent" for touch events only if the touch is in a transparent area of your scrollview, your implementation should look like:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return ![self isPointInsideATransparentRegion:point]; //you need to implement isPointInsideATransparentRegion to check whether the point touched is in a transparent region or not
}
I've somewhat solved this now by adding the view that's supposed to be below the scrollview to the scrollview as the first subview, and shifting its position in scrollViewDidScroll:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
[self updateBottomViewPosition];
}
- (void)updateBottomViewPosition {
CGPoint contentOffset = _mainScrollView.contentOffset;
CGFloat y = MAX(contentOffset.y, 0);
CGRect frame = _bottomPage.frame;
if (y != frame.origin.y) {
frame.origin.y = y;
_leadPage.frame = frame;
}
}
This works, but it's probably not as elegant as possible.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With