2017-05-29 34 views
0

有一種方法來實現一種方法,當用戶點擊圖表時,我可以知道插入到我的數組中的x-y值?添加點當用戶點擊圖表 - 'LineChartView'(iOS圖表)

我試圖使用方法:

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {} 

但這種方法讓我發現,我已經有最近的點。

如果我使用:

@IBOutlet var chart: LineChartView! 

let tap = UITapGestureRecognizer(target: self, action: #selector(self.longTouch(_:))) 
self.chartView.addGestureRecognizer(tap) 

func touch(_ sender: UIGestureRecognizer) { 
    let touchPoint = sender.location(in: self.chart) 
} 

的「接觸點」返回絕對視圖的X-Y和不相關的圖表。

有人可以幫助我嗎?謝謝!

+1

您從'chartValueSelected'方法起訴哪個值?你用'entry.x'? – CodeChanger

+0

是的,我使用的是'entry.x'和'entry.y',它們都是先前插入的最近點,而不是我觸及的點。謝謝! – ventuz

+0

是的這種方法只返回X和Y的最近點,我可以知道爲什麼你需要絕對接觸點? – CodeChanger

回答

0

我已經解決添加手勢識別給視圖:

// Gesture Recognizer to add a new value 
func addGesture() { 
    let gesture = UILongPressGestureRecognizer(target: self, action: #selector(gestureRecognizerShouldBegin(_:))) 
    gesture.minimumPressDuration = 0.3 
    _chartView?.addGestureRecognizer(gesture) 
} 
在我使用該inerith到 LineChartView valueForTouchPoint(point: _)所述手勢方法

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 

    if gestureRecognizer.state == .began { 

     // Recognize the location in the view 
     let touchLocation = gestureRecognizer.location(in: self._chartView) 
     // The 'x-y' value where user touch the view 
     let touchedPoint: CGPoint? = self._chartView?.valueForTouchPoint(point: touchLocation, axis: .right) 

     guard let point = touchedPoint else { return false } 

     // save the value... 

    return true 
} 

而且,如果我放大或平移圖表,該方法將返回正確的值x-y值。

希望這會幫助別人!