0

忍チャートの使用

目盛りとチャート注釈にジェスチャ認識機能を (タッチアップで) 追加する方法の例を探しています

シリーズ データ シリーズの操作に関するドキュメントを参照しましたが、目盛りと注釈イベントに GestureRecognizers を追加する必要があります。

私は運がない tickMark/datapoint ラベルに対してこれを試しました:

 func sChart(chart: ShinobiChart!, alterTickMark tickMark: SChartTickMark!, beforeAddingToAxis axis: SChartAxis!) {

    if let label = tickMark.tickLabel {
        //added a gesture recognizer here but it didn't work
    }

SchartAnnotations については、そこに追加する方法がわかりません

4

1 に答える 1

0

私はあなたがラベルでほぼそこにいると思います。userInteractionEnabled = trueたとえば、設定するだけでよいことがわかりました

func sChart(chart: ShinobiChart!, alterTickMark tickMark: SChartTickMark!, beforeAddingToAxis axis: SChartAxis!) {
    if let label = tickMark.tickLabel {

        let tapRecognizer = UITapGestureRecognizer(target: self, action: "labelTapped")
        tapRecognizer.numberOfTapsRequired = 1
        label.addGestureRecognizer(tapRecognizer)

        label.userInteractionEnabled = true
    }
}

SChartCanvasOverlay (ジェスチャをリッスンする役割) の下のビューにあるため、注釈は少しトリッキーです。これにより、ジェスチャが注釈に到達する前に「飲み込まれて」しまいます。

可能ですが、チャートに UITapGestureRecognizer を追加してから、チャートの注釈をループして、タッチ ポイントが注釈内にあるかどうかを確認する必要があります。例えば:

ビューでDidLoad:

let chartTapRecognizer = UITapGestureRecognizer(target: self, action: "annotationTapped:")
chartTapRecognizer.numberOfTapsRequired = 1
chart.addGestureRecognizer(chartTapRecognizer)

そして、annotationTapped 関数:

func annotationTapped(recognizer: UITapGestureRecognizer) {

    var touchPoint: CGPoint?

    // Grab the first annotation so we can grab its superview for later use
    if let firstAnnotation = chart.getAnnotations().first as? UIView {
        // Convert touch point to position on annotation's superview

        let glView = firstAnnotation.superview!

        touchPoint = recognizer.locationInView(glView)
    }

    if let touchPoint = touchPoint {

        // Loop through the annotations
        for item in chart.getAnnotations() {
            let annotation: SChartAnnotation = item as SChartAnnotation

            if (CGRectContainsPoint(annotation.frame, touchPoint as CGPoint)) {
                chart.removeAnnotation(annotation)
            }
        }
    }
}
于 2015-04-16T08:15:25.747 に答える