简体   繁体   中英

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?

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
}

将图表视图上的userInteractionEnabled设置为NO

I think I figured it out... I removed all the UIPanGestureRecognizers from the ios-charts subview. This allowed for the scrollview to handle all the pan events.

for(UIGestureRecognizer *rec in self.chart.gestureRecognizers){
    if([rec isKindOfClass:[UIPanGestureRecognizer class]]){
        [self.chart removeGestureRecognizer:rec];
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM