2017-03-14 2 views
3

나는 Swift 3을 사용하여 작은 실습 IOS 응용 프로그램을 개발 중이다. 그 응용 프로그램 내에서 나는 원형 차트를 갖고 싶다. 원형 차트를 만들려면 this 링크를 따라 파이 차트가 생성됩니다.Swift3 IOS 원형 차트에서 탭 제스처 인식을 추가하는 방법은 무엇입니까?

이제 하나 이상의 기능을 추가하고 싶습니다. 사용자가 임의의 달과 같이 원형 차트 영역 중 하나를 탭하면 새 컨트롤러가 열리 며 그 달의 세부 정보 만 표시됩니다.

제스처 인식 기능을 추가 할 수있었습니다. 그러나 화면의 일부를 탭하면 새 화면이 열립니다. 해당 탭 기능을 원형 차트 섹션에만 제한하고 원형 차트 월을 캡처해야합니다. 코드는

let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap)) 

pieChartView.addGestureRecognizer(gestureRecognizer) 

그리고 탭의 코드를 처리가

func handleTap(gestureRecognizer: UIGestureRecognizer) { 
let monthDetail = storyboard?.instantiateViewController(withIdentifier: "MonthTableView") as! MonthDetailsTableViewController 
monthDetail = month //Should be the month value of Tap area 
navigationController?.pushViewController(monthDetail, animated: true) 

} 

어떤 도움을 주셔서 감사합니다입니다!

==========================

업데이트 코드

import UIKit 
import Charts 
import CoreData 

class ExpenseViewController: UIViewController, ChartViewDelegate { 

@IBOutlet weak var pieChartView: PieChartView! 

    let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] 
    var unitsSold = [10.0, 20.0, 10.0, 30.0, 10.0, 10.0] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     setChart(dataPoints: months, values: unitsSold) 

     pieChartView.delegate = self 
    } 

    func setChart(dataPoints: [String], values: [Double]) { 
     var dataEntries: [ChartDataEntry] = [] 

     for i in 0..<dataPoints.count { 
      let dataEntry = PieChartDataEntry(value: values[i], label: dataPoints[i]) 
      dataEntries.append(dataEntry) 
     } 


     let pieChartDataSet = PieChartDataSet(values: dataEntries, label: "Units Sold") 
     let pieChartData = PieChartData(dataSet: pieChartDataSet) 

     pieChartView.data = pieChartData 

     } 

    func chartValueSelected(chartView: ChartViewBase, entry: ChartDataEntry, dataSetIndex: Int, highlight: ChartHighlighter) { 
     //print("\(entry.value) in \(months[entry.xIndex])") 
     print("Y = \(entry.y) ") 
     print("X = \(entry.x) ") 
    } 

} 

답변

4

확인 터치 이벤트 부분 Appcoda tutorial에 메서드는 chartValueSelected이므로 UITapGestureRecognizer 대신 해당 메서드를 사용해야합니다. handleTap에서

func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) { 
    print("\(entry.value) in \(yourArray[entry.xIndex])") 
} 
+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 그러나 링크에서 제공되는 단계를 수행 한 후에도 chartValueSelected 함수를 호출하지 않습니다. 왜 그런지 궁금해? ChartViewDeleage로 클래스를 확장하고 pieChartView.delegate = self를 추가했지만 아직 작동하지 않습니다. – NGR

+0

@NGR 게시물을 현재 코드로 편집하고 위임자가 올바르게 설정되었는지 확인하십시오. –

+0

친절히 내 업데이트 된 코드 찾기 – NGR

0

는 제스처 인식기의 locationInView 차트의 어떤 부분을 파악 (있는 경우)는 상기 탭이고, 따라서 대응하는 사용.

관련 문제