2017-03-14 12 views
3

私はスイフト3を使って小さな練習IOSアプリを開発中です。そのアプリの中で、私は円グラフを持っていきたいと思います。円グラフを作成するには、thisリンクを継承し、円グラフが生成されています。Swift3 IOS Pieチャートでタップジェスチャ認識を追加するには?

もう1つの機能を追加します。ユーザーが任意の月のように円グラフの領域の1つをタップすると、新しいコントローラが開き、その月の詳細のみが表示されます。

ジェスチャー認識機能を追加することができました。しかし、画面の任意の部分をタップすると、新しい画面が開きます。そのタップ機能をPieチャートセクションのみに制限し、Pieチャート月をキャプチャする必要があります。コードは

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

こんにちはNirav。返信ありがとう。しかし、リンクで提供された手順に従った後でも、chartValueSelected関数を呼び出さない。なぜだろう? ChartViewDeleageでクラスを拡張し、pieChartView.delegate = selfを追加しましたが、まだ動作しません。 – NGR

+0

@NGR投稿を現在のコードで編集して、代理人が正しく設定されているかどうかを確認してください。 –

+0

更新されたコード – NGR

0

は、ジェスチャー認識のlocationInViewは、チャートのどの部分を見つけ出す(もしあれば)タップであり、それに応じて応答するために使用します。

関連する問題