diff --git a/Source/Charts/Charts/LineChartView.swift b/Source/Charts/Charts/LineChartView.swift index e7918266b2..ec110c4c8d 100644 --- a/Source/Charts/Charts/LineChartView.swift +++ b/Source/Charts/Charts/LineChartView.swift @@ -26,3 +26,12 @@ open class LineChartView: BarLineChartViewBase, LineChartDataProvider open var lineData: LineChartData? { return data as? LineChartData } } + +extension LineChartView { + + public final func setChartMinMaxYValues(chartYMin: Double, chartYMax: Double) { + let leftAxis = self.leftAxis + leftAxis.axisMaximum = chartYMax + leftAxis.axisMinimum = chartYMin + } +} diff --git a/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift b/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift index 1392cd2465..bcbc4f4aa3 100644 --- a/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift +++ b/Source/Charts/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift @@ -23,12 +23,24 @@ open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDa /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. open var drawVerticalHighlightIndicatorEnabled = true + + /// Enables / disables the horizontal radar highlight-indicator. If disabled, the indicator is not drawn. + open var drawHorizontalHighlightRadarIndicatorEnabled = true + + /// Enables / disables the vertical radar highlight-indicator. If disabled, the indicator is not drawn. + open var drawVerticalHighlightRadarIndicatorEnabled = true /// `true` if horizontal highlight indicator lines are enabled (drawn) open var isHorizontalHighlightIndicatorEnabled: Bool { return drawHorizontalHighlightIndicatorEnabled } /// `true` if vertical highlight indicator lines are enabled (drawn) open var isVerticalHighlightIndicatorEnabled: Bool { return drawVerticalHighlightIndicatorEnabled } + + /// `true` if horizontal highlight radar indicator lines are enabled (drawn) + open var isHorizontalHighlightRadarIndicatorEnabled: Bool { return drawHorizontalHighlightRadarIndicatorEnabled } + + /// `true` if vertical highlight radar indicator lines are enabled (drawn) + open var isVerticalHighlightRadarIndicatorEnabled: Bool { return drawVerticalHighlightRadarIndicatorEnabled } /// Enables / disables both vertical and horizontal highlight-indicators. /// :param: enabled @@ -37,6 +49,15 @@ open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDa drawHorizontalHighlightIndicatorEnabled = enabled drawVerticalHighlightIndicatorEnabled = enabled } + + /// Enables / disables both vertical and horizontal radar highlight-indicators. + /// :param: enabled + open func setDrawHighlightRadarIndicators(_ enabled: Bool) { + drawHorizontalHighlightIndicatorEnabled = enabled + drawVerticalHighlightIndicatorEnabled = enabled + drawHorizontalHighlightRadarIndicatorEnabled = enabled + drawVerticalHighlightRadarIndicatorEnabled = enabled + } // MARK: NSCopying @@ -45,6 +66,8 @@ open class LineScatterCandleRadarChartDataSet: BarLineScatterCandleBubbleChartDa let copy = super.copy(with: zone) as! LineScatterCandleRadarChartDataSet copy.drawHorizontalHighlightIndicatorEnabled = drawHorizontalHighlightIndicatorEnabled copy.drawVerticalHighlightIndicatorEnabled = drawVerticalHighlightIndicatorEnabled + copy.drawHorizontalHighlightRadarIndicatorEnabled = drawHorizontalHighlightRadarIndicatorEnabled + copy.drawVerticalHighlightRadarIndicatorEnabled = drawVerticalHighlightRadarIndicatorEnabled return copy } diff --git a/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift b/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift index 25325e0366..7bed7b9585 100644 --- a/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift +++ b/Source/Charts/Data/Interfaces/LineScatterCandleRadarChartDataSetProtocol.swift @@ -23,14 +23,30 @@ public protocol LineScatterCandleRadarChartDataSetProtocol: BarLineScatterCandle /// Enables / disables the vertical highlight-indicator. If disabled, the indicator is not drawn. var drawVerticalHighlightIndicatorEnabled: Bool { get set } + + /// Enables / disables the horizontal radar highlight-indicator. If disabled, the indicator is not drawn. + var drawHorizontalHighlightRadarIndicatorEnabled: Bool { get set } + + /// Enables / disables the vertical radar highlight-indicator. If disabled, the indicator is not drawn. + var drawVerticalHighlightRadarIndicatorEnabled: Bool { get set } /// `true` if horizontal highlight indicator lines are enabled (drawn) var isHorizontalHighlightIndicatorEnabled: Bool { get } /// `true` if vertical highlight indicator lines are enabled (drawn) var isVerticalHighlightIndicatorEnabled: Bool { get } + + /// `true` if horizontal highlight radar indicator lines are enabled (drawn) + var isHorizontalHighlightRadarIndicatorEnabled: Bool { get } + + /// `true` if vertical highlight radar indicator lines are enabled (drawn) + var isVerticalHighlightRadarIndicatorEnabled: Bool { get } /// Enables / disables both vertical and horizontal highlight-indicators. /// :param: enabled func setDrawHighlightIndicators(_ enabled: Bool) + + /// Enables / disables both vertical and horizontal radar highlight-indicators. + /// :param: enabled + func setDrawHighlightRadarIndicators(_ enabled: Bool) } diff --git a/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift b/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift index dd33ffe862..7c3db22fe3 100644 --- a/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift +++ b/Source/Charts/Renderers/LineScatterCandleRadarRenderer.swift @@ -11,6 +11,7 @@ import Foundation import CoreGraphics +import UIKit @objc(LineScatterCandleRadarChartRenderer) open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer @@ -32,6 +33,22 @@ open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer if set.isVerticalHighlightIndicatorEnabled { context.beginPath() + + if set.isVerticalHighlightRadarIndicatorEnabled { + let colorTop = UIColor.white.cgColor + let colorBottom = UIColor.clear.cgColor + + var gradientOne = CGGradient(colorsSpace: .none, colors: [colorTop, colorBottom] as CFArray, locations: [0.0, 1.0])! + let startPointOne = CGPoint(x: point.x, y: point.y) + let endPointOne = CGPoint(x: point.x, y: viewPortHandler.contentBottom) + context.drawRadialGradient(gradientOne, startCenter: startPointOne, startRadius: 0.5, endCenter: endPointOne, endRadius: 0.5, options: .drawsAfterEndLocation) + + var gradientTwo = CGGradient(colorsSpace: .none, colors: [colorBottom, colorTop] as CFArray, locations: [0.0, 1.0])! + let startPointTwo = CGPoint(x: point.x, y: viewPortHandler.contentTop) + let endPointTwo = CGPoint(x: point.x, y: point.y) + context.drawRadialGradient(gradientTwo, startCenter: startPointTwo, startRadius: 0.5, endCenter: endPointTwo, endRadius: 0.5, options: .drawsBeforeStartLocation) + } + context.move(to: CGPoint(x: point.x, y: viewPortHandler.contentTop)) context.addLine(to: CGPoint(x: point.x, y: viewPortHandler.contentBottom)) context.strokePath() @@ -41,6 +58,22 @@ open class LineScatterCandleRadarRenderer: BarLineScatterCandleBubbleRenderer if set.isHorizontalHighlightIndicatorEnabled { context.beginPath() + + if set.isHorizontalHighlightRadarIndicatorEnabled { + let colorTop = UIColor.white.cgColor + let colorBottom = UIColor.clear.cgColor + + var gradientOne = CGGradient(colorsSpace: .none, colors: [colorBottom, colorTop] as CFArray, locations: [0.0, 1.0])! + let startPointOne = CGPoint(x: viewPortHandler.contentLeft, y: point.y) + let endPointOne = CGPoint(x: point.x, y: point.y) + context.drawRadialGradient(gradientOne, startCenter: startPointOne, startRadius: 0.5, endCenter: endPointOne, endRadius: 0.5, options: .drawsBeforeStartLocation) + + var gradientTwo = CGGradient(colorsSpace: .none, colors: [colorBottom, colorTop] as CFArray, locations: [0.0, 1.0])! + let startPointTwo = CGPoint(x: viewPortHandler.contentRight, y: point.y) + let endPointTwo = CGPoint(x: point.x, y: point.y) + context.drawRadialGradient(gradientTwo, startCenter: startPointTwo, startRadius: 0.5, endCenter: endPointTwo, endRadius: 0.5, options: .drawsBeforeStartLocation) + } + context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: point.y)) context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: point.y)) context.strokePath()