拖动ios-charts子视图时,uiscrollview不会滚动

时间:2015-06-18 08:20:09

标签: ios objective-c uiscrollview ios-charts

我有一个ios-chart作为占据屏幕一半的子视图。当我平移任何其他子视图时,它会滚动。但不是当我在图表上平移时。 我尝试过设置:

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

它在documentation

中说
  

defaultTouchEventsEnabled   启用/禁用要处理的默认触摸事件。禁用时,触摸不会传递给父视图,因此在UIScrollView中滚动将无法正常工作。

在图表上平移/拖动时,如何启用滚动功能?

3 个答案:

答案 0 :(得分:6)

我也在努力解决这个问题。由于我需要图表可滚动,@ Entrabiter的解决方案对我不起作用。唯一对我有用的解决方案是将图表视图UIPanGestureRecognizer的代表分配给我的ViewController并实现UIGestureRecognizerDelegate

此解决方案在Swift中,但在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
                }
            }
        }
    }
}

重要的是告诉gestureRecognizer识别scrollview的panGestureRecognizer以及chartview的panGestureRecognizer。

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

    return false
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我想我弄清楚了...... 我从ios-charts子视图中删除了所有UIPanGestureRecognizer。 这允许scrollview处理所有pan事件。

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