Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

uiscrollview won't scroll when dragging on ios-charts subview

I have a ios-chart as a subview that takes up half the screen. When I pan up on any other subview it scrolls. But not when I pan on the chart. I tried setting:

[self.chart setDefaultTouchEventsEnabled:YES];
//and
[self.chart setScaleEnabled:NO];

It says in the documentation

defaultTouchEventsEnabled enables/disables default touch events to be handled. When disable, touches are not passed to parent views so scrolling inside a UIScrollView won’t work.

What can I do to enable scrolling when panning/dragging on the chart?

like image 877
Entrabiter Avatar asked Feb 10 '23 19:02

Entrabiter


1 Answers

I was struggling with this as well. Since I needed the chart to be scrollable, @Entrabiter's solution didn't work for me. The only solution that worked for me, was assigning the delegate of the chart view's UIPanGestureRecognizer to my ViewController and implement UIGestureRecognizerDelegate.

This solution is in Swift, but it should also work fine in Objective-C.

class MyViewController: UIViewController, UIGestureRecognizerDelegate {
    // MARK: Outlets
    @IBOutlet weak var contentView: UIScrollView!
    @IBOutlet weak var myChart: LineChartView!

    override func viewDidLoad() {
        super.viewDidLoad()

        if let gestureRecognizers = myChart.gestureRecognizers {
            for gestureRecongnizer in gestureRecognizers {
                if gestureRecongnizer is UIPanGestureRecognizer {
                    gestureRecongnizer.delegate = self
                }
            }
        }
    }
}

The important part is to tell the gestureRecognizer to recognize both the scrollview's panGestureRecognizer as well as the chartview's panGestureRecognizer.

// MARK: UIGestureRecognizerDelegate
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    if otherGestureRecognizer == contentView.panGestureRecognizer {
        return true
    }

    return false
}
like image 71
ergoon Avatar answered Feb 24 '23 10:02

ergoon