HitTest() メソッドを使用して、FlexChart 内でユーザーがタップしたポイントの X および Y 座標やインデックスを判定します。このメソッドは、FlexChart の系列外にツールチップを表示するといったシナリオで役立ちます。
次のコード例は、chart_Tapped イベントを定義する方法を示します。このイベントは、HitTest() メソッドを呼び出して、FlexChart 領域内のタップされたポイントの情報を取得し、それをグラフのフッターに表示します。
次の図は、HitTest() メソッドを定義した後の FlexChart を示しています。
FlexChart コントロールを初期化するには、ViewController.cs ファイルを開き、その内容を次のコードで置き換えます。これは、FlexChart を初期化するために、View コントローラの viewDidLoad メソッドをオーバーライドします。
CS |
コードのコピー
|
---|---|
public partial class ViewController : UIViewController { public ViewController(IntPtr handle) : base(handle) { } public override void ViewDidLoad() { base.ViewDidLoad(); // ビューを読み込んだ後の追加セットアップを行います int len = 20; List<CGPoint> listCosTuple = new List<CGPoint>(); List<CGPoint> listSinTuple = new List<CGPoint>(); for (int i = 0; i < len; i++) { listCosTuple.Add(new CGPoint(i, Math.Cos(0.12 * i))); listSinTuple.Add(new CGPoint(i, Math.Sin(0.12 * i))); } //chart = new FlexChart(); chart.BindingX = "X"; chart.ChartType = ChartType.LineSymbols; chart.AxisY.Format = "F"; chart.Header = "三角関数"; chart.Footer = "デカルト座標"; chart.Series.Add(new ChartSeries() { SeriesName = "cos(x)", Binding = "Y,Y", ItemsSource = listCosTuple }); chart.Series.Add(new ChartSeries() { SeriesName = "sin(x)", Binding = "Y,Y", ItemsSource = listSinTuple }); chart.Tapped += OnChartTapped; } private void OnChartTapped(object sender, C1TappedEventArgs e) { var pt = e.GetPosition(chart); var info = chart.HitTest(pt); if (info != null) { pointIndexLabel.Text = string.Format(NSBundle.MainBundle.LocalizedString("Point Index", "Point Index") + " {0}", info.PointIndex); xyValuesLabel.Text = string.Format(NSBundle.MainBundle.LocalizedString("X Y Values", "X Y Values") + " X: {0}, Y: {1:F2}", info.X, info.Y); if (info.Series != null) { seriesLabel.Text = string.Format(NSBundle.MainBundle.LocalizedString("SeriesName", "SeriesName") + " {0}", info.Series.Name); } else { seriesLabel.Text = NSBundle.MainBundle.LocalizedString("SeriesName", "SeriesName"); } chartElementLabel.Text = string.Format(NSBundle.MainBundle.LocalizedString("Chart element", " Chart element") + " {0}", info.ChartElement.ToString()); } } public override void DidReceiveMemoryWarning() { base.DidReceiveMemoryWarning(); // 使用されていないキャッシュされたデータ、イメージなどを解放します } } |