私はスイフト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) ")
}
}
こんにちはNirav。返信ありがとう。しかし、リンクで提供された手順に従った後でも、chartValueSelected関数を呼び出さない。なぜだろう? ChartViewDeleageでクラスを拡張し、pieChartView.delegate = selfを追加しましたが、まだ動作しません。 – NGR
@NGR投稿を現在のコードで編集して、代理人が正しく設定されているかどうかを確認してください。 –
更新されたコード – NGR