Xamarin.iOS のドキュメント
ヒットテスト
コントロール > FlexChart > 機能 > ヒットテスト

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();
        // 使用されていないキャッシュされたデータ、イメージなどを解放します
    }
}