2015-06-18 71 views
2

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

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

它说,在documentation

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

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

回答

0

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

+0

工作。但现在我无法挖掘我的观点。有两种方法可以实现吗? – Entrabiter

+0

@Erabrabiter你使用的图表库是什么? – rounak

+0

使用ios图表http://cocoadocs.org/docsets/Charts/2.1.0/index.html – Entrabiter

0

我想我想通了...... 我从ios-charts子视图中删除了所有的UIPanGestureRecognizers。 这允许scrollview处理所有的泛事件。

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

我也在为此而苦苦挣扎。由于我需要图表滚动,所以@ 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认识到这两个滚动视图的panGestureRecognizer还有chartview的panGestureRecognizer。

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

    return false 
} 
相关问题