4

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

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

它在文档中说

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

在图表上平移/拖动时,我可以做些什么来启用滚动?

4

3 回答 3

8

我也在为此苦苦挣扎。由于我需要图表可以滚动,@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
}
于 2015-12-26T14:54:39.883 回答
0

userInteractionEnabled在图表视图上设置为NO

于 2015-06-18T08:22:18.853 回答
0

我想我想通了...我从 ios-charts 子视图中删除了所有 UIPanGestureRecognizers。这允许滚动视图处理所有平移事件。

for(UIGestureRecognizer *rec in self.chart.gestureRecognizers){
    if([rec isKindOfClass:[UIPanGestureRecognizer class]]){
        [self.chart removeGestureRecognizer:rec];
    }
}
于 2015-06-18T16:02:19.173 回答