我有一个ios-chart作为占据屏幕一半的子视图。当我平移任何其他子视图时,它会滚动。但不是当我在图表上平移时。 我尝试过设置:
[self.chart setDefaultTouchEventsEnabled:YES];
//and
[self.chart setScaleEnabled:NO];
中说
defaultTouchEventsEnabled 启用/禁用要处理的默认触摸事件。禁用时,触摸不会传递给父视图,因此在UIScrollView中滚动将无法正常工作。
在图表上平移/拖动时,如何启用滚动功能?
答案 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];
}
}