私が知っているように、チャートライブラリの現在のバージョンには、選択したバーの周りのハイライトボーダーのプロパティはありません。しかし、BarChartRenderer
クラスから独自のクラスを継承し、関数drawHighlighted(context: indices:)
をオーバーライドし、新しいレンダラークラスのインスタンスをグラフのカスタムレンダラーとして使用できます。
カスタムレンダラークラス:新しいレンダラを使用して
class MyBarChartRenderer: BarChartRenderer {
// New properties for the border
var highlightBorderColor: UIColor = .red
var highlightBorderWidth: CGFloat = 2
open override func drawHighlighted(context: CGContext, indices: [Highlight])
{
guard
let dataProvider = dataProvider,
let barData = dataProvider.barData
else { return }
context.saveGState()
var barRect = CGRect()
for high in indices
{
guard
let set = barData.getDataSetByIndex(high.dataSetIndex) as? IBarChartDataSet,
set.isHighlightEnabled
else { continue }
if let e = set.entryForXValue(high.x, closestToY: high.y) as? BarChartDataEntry
{
let trans = dataProvider.getTransformer(forAxis: set.axisDependency)
// Setting color and width for the border
context.setStrokeColor(highlightBorderColor.cgColor)
context.setLineWidth(highlightBorderWidth)
let isStack = high.stackIndex >= 0 && e.isStacked
let y1: Double
let y2: Double
if isStack
{
if dataProvider.isHighlightFullBarEnabled
{
y1 = e.positiveSum
y2 = -e.negativeSum
}
else
{
let range = e.ranges?[high.stackIndex]
y1 = range?.from ?? 0.0
y2 = range?.to ?? 0.0
}
}
else
{
y1 = e.y
y2 = 0.0
}
prepareBarHighlight(x: e.x, y1: y1, y2: y2, barWidthHalf: barData.barWidth/2.0, trans: trans, rect: &barRect)
// Drawing the border
context.stroke(barRect)
}
}
context.restoreGState()
}
}
:あなたがこれまで持っていないものを
:
そしてその結果は?エントリをクリックすると、強調表示されますか? – DevB2F
はい、強調表示の色とアルファを変更できますが、これは達成したいものではありません。強調表示されたバーの周りに境界線を作成したいだけです。 –