Skip to content

Commit

Permalink
Merge pull request ChartsOrg#3 from robert-doan/feat/add-remove-highl…
Browse files Browse the repository at this point in the history
…ighted-when-touch-released

feat: add removeHighlightedWhenTouchReleased property to BarLineChartViewBase
  • Loading branch information
yxras committed Aug 25, 2021
2 parents 8726b51 + 87a2149 commit 3806979
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
1 change: 1 addition & 0 deletions ChartsDemo-iOS/Swift/Demos/LineChart1ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class LineChart1ViewController: DemoBaseViewController {
chartView.dragEnabled = true
chartView.setScaleEnabled(true)
chartView.pinchZoomEnabled = true
chartView.removeHighlightedWhenTouchReleased = true

// x-axis limit line
let llXAxis = ChartLimitLine(limit: 10, label: "Index 10")
Expand Down
37 changes: 37 additions & 0 deletions Source/Charts/Charts/BarLineChartViewBase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartD
/// the color for the background of the chart-drawing area (everything behind the grid lines).
@objc open var gridBackgroundColor = NSUIColor(red: 240/255.0, green: 240/255.0, blue: 240/255.0, alpha: 1.0)

@objc open var removeHighlightedWhenTouchReleased = false {
didSet {
_tapGestureRecognizer.isEnabled = !removeHighlightedWhenTouchReleased;
_longPressGestureRecognizer.isEnabled = removeHighlightedWhenTouchReleased;
}
}

@objc open var borderColor = NSUIColor.black
@objc open var borderLineWidth: CGFloat = 1.0

Expand Down Expand Up @@ -88,6 +95,7 @@ open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartD
@objc open lazy var xAxisRenderer = XAxisRenderer(viewPortHandler: viewPortHandler, axis: xAxis, transformer: _leftAxisTransformer)

internal var _tapGestureRecognizer: NSUITapGestureRecognizer!
internal var _longPressGestureRecognizer: NSUILongPressGestureRecognizer!
internal var _doubleTapGestureRecognizer: NSUITapGestureRecognizer!
#if !os(tvOS)
internal var _pinchGestureRecognizer: NSUIPinchGestureRecognizer!
Expand Down Expand Up @@ -122,16 +130,21 @@ open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartD
self.highlighter = ChartHighlighter(chart: self)

_tapGestureRecognizer = NSUITapGestureRecognizer(target: self, action: #selector(tapGestureRecognized(_:)))
_longPressGestureRecognizer = NSUILongPressGestureRecognizer(target: self, action: #selector(longPressGestureRecognized(_:)))
_longPressGestureRecognizer.minimumPressDuration = 0
_doubleTapGestureRecognizer = NSUITapGestureRecognizer(target: self, action: #selector(doubleTapGestureRecognized(_:)))
_doubleTapGestureRecognizer.nsuiNumberOfTapsRequired = 2
_panGestureRecognizer = NSUIPanGestureRecognizer(target: self, action: #selector(panGestureRecognized(_:)))

_panGestureRecognizer.delegate = self

self.addGestureRecognizer(_tapGestureRecognizer)
self.addGestureRecognizer(_longPressGestureRecognizer)
self.addGestureRecognizer(_doubleTapGestureRecognizer)
self.addGestureRecognizer(_panGestureRecognizer)

_tapGestureRecognizer.isEnabled = !removeHighlightedWhenTouchReleased;
_longPressGestureRecognizer.isEnabled = removeHighlightedWhenTouchReleased;
_doubleTapGestureRecognizer.isEnabled = _doubleTapToZoomEnabled
_panGestureRecognizer.isEnabled = _dragXEnabled || _dragYEnabled

Expand Down Expand Up @@ -555,6 +568,30 @@ open class BarLineChartViewBase: ChartViewBase, BarLineScatterCandleBubbleChartD
}
}

@objc private func longPressGestureRecognized(_ recognizer: NSUITapGestureRecognizer)
{
if data === nil
{
return
}

if recognizer.state == NSUIGestureRecognizerState.began ||
recognizer.state == NSUIGestureRecognizerState.changed
{
if !isHighLightPerTapEnabled { return }

let highlight = getHighlightByTouchPoint(recognizer.location(in: self))

if highlight != self.lastHighlighted {
lastHighlighted = highlight
highlightValue(highlight, callDelegate: true)
}
} else if recognizer.state == NSUIGestureRecognizerState.ended {
highlightValue(nil, callDelegate: true)
setNeedsDisplay()
}
}

@objc private func doubleTapGestureRecognized(_ recognizer: NSUITapGestureRecognizer)
{
if data === nil
Expand Down
1 change: 1 addition & 0 deletions Source/Charts/Utils/Platform+Gestures.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public typealias NSUIGestureRecognizerState = UIGestureRecognizer.State
public typealias NSUIGestureRecognizerDelegate = UIGestureRecognizerDelegate
public typealias NSUITapGestureRecognizer = UITapGestureRecognizer
public typealias NSUIPanGestureRecognizer = UIPanGestureRecognizer
public typealias NSUILongPressGestureRecognizer = UILongPressGestureRecognizer

extension NSUITapGestureRecognizer
{
Expand Down

0 comments on commit 3806979

Please sign in to comment.