iOS develop. How to extend UIScrollView's scroll event responding area?

前端 未结 3 883
暗喜
暗喜 2020-12-17 16:34

I have a UIScrollView\'s paging enabled and set its clipToBounds = NO so that I can see outside current page.

What I want is to enable the

相关标签:
3条回答
  • 2020-12-17 17:12

    2019 syntax example:

    class LargerScrollArea: UICollectionView {
    
        // Example, say this is the left half of the screen, but, we wish to be
        // able to scroll on the whole width of the screen
    
        override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    
            if isUserInteractionEnabled == false { return nil }
    
            let extraOnRight = bounds.width
            let largerBounds = bounds.inset(by:
                    UIEdgeInsets(top: 0, left: 0, bottom:0, right: -extraOnRight))
            if largerBounds.contains(point) {
                return self
            }
            else {
                return nil
            }
        }
    }
    

    (Collection view, table view, all the same.)

    0 讨论(0)
  • 2020-12-17 17:30

    Why don't you resize your scrollView so it'll fit the area you need?

    Not sure if it'll help, but try to override UIScrollView pointInside method

    - (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event {
        CGRect newBounds = self.bounds;
        newBounds = CGRectInset(bounds, 0, -100.0f);
        return CGRectContainsPoint(newBounds, point);
    }
    
    0 讨论(0)
  • 2020-12-17 17:38

    Put the scrollview into a uiview and disable clipsToBounds of the scrollview. the scrollview must be the size you want for paging. you will see the content outside of the scrollview but paging wil still be the same. You can activate clipsToBounce for the outside view to limit the size of the scrollview.

    Overwrite the hitTest of the view to redirect the touches to the scrollview... then you will be able to also scroll by touching outside of the scrollview.

    0 讨论(0)
提交回复
热议问题