我正在iOS上实现折线图,能够使用iOS Charts和Swift
比较数据比较1月4日至1月5日05日至1月6日,1月6日至1月7日等数据,等等......
所以,我需要用不同的XAxis 绘制2行(第二行是第一行的1天移位)和相同的YAxis
创建2个折线图视图(LineChartView
),1包含顶部XAxis和图例;和1具有底部XAxis和图例
由于XAxis标签和图例的空间,2行具有不同的YAxis位置(例如:第1行的0值约为第2行的96值)。我认为一些保证金可以解决这个问题,但我只能找到1个选项minOffset
,它为所有顶部,底部,左侧和右侧设置了边距。我只能使用上边距和下边距的什么东西?
所有互动(拖动,缩放,触摸等)仅影响其中一个,而不是两者。如何将交互应用于它们?
更新
我通过添加minTopBottomOffset并修改ChartViewBase
来使用它来解决第一个问题
有关我的期望的更多信息:
[{time: Jan 01, value: 10}, {time: Jan 02, value: 13}, {time: Jan 03, value: 5}]
time
是X,value
是Y 在此处查看我的预期图表:https://drive.google.com/file/d/0B5DT3STrB2t3UW0wTXpKU1RHSTA/view
谢谢!
答案 0 :(得分:1)
好的,我认为你的图表和我一样奇怪。 :P
1,我只能使用上边距和下边距的什么东西?
您无需将minTopBottomOffset添加到BarLineChartViewBase。您应该只使用setViewPortOffsets
方法。
chartView.setViewPortOffsets(left: left, top: top, right: right, bottom: bottom)
2,所有互动(拖动,缩放,触摸等)仅影响其中一个,而不是两者。如何将交互应用于它们?
我们可以用一点点的方式来做 - 添加一个块视图来接收所有手势,并将它们传递给每个图表。
首先,在BarLineChartViewBase
中,添加如下方法(代码未完成。它现在仅适用于TapGestureRecognizer和PanGestureRecognizer。)。
//Modify
@objc open func receiveGestureRecognized(_ recognizer: NSUIGestureRecognizer)
{
if recognizer is NSUITapGestureRecognizer
{
self.tapGestureRecognized(recognizer as! NSUITapGestureRecognizer)
}
else if recognizer is NSUIPanGestureRecognizer
{
self.panGestureRecognized(recognizer as! NSUIPanGestureRecognizer)
}
}
其次,您应该在两个图表前添加一个块视图并覆盖它们。
然后添加一些这样的代码(PanGestureRecognizer的例子):
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[self.blockView addGestureRecognizer:panGestureRecognizer];
handleGesture:
- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
[self.chartView1 receiveGestureRecognized:gestureRecognizer];
[self.chartView2 receiveGestureRecognized:gestureRecognizer];
}
所以最后你可以同时拖动它们。