아시다시피 차트 라이브러리의 현재 버전에는 선택한 막대 주위의 강조 표시 경계선에 대한 속성이 없습니다. 그러나 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()
}
}
새로운 렌더러의 사용 :
myBarChartView.renderer = MyBarChartRenderer(
dataProvider: self.barChartView,
animator: self.barChartView.chartAnimator,
viewPortHandler: self.barChartView.viewPortHandler)
그리고 결과 :
지금까지해야합니까 무엇
? 항목을 클릭하면 강조 표시됩니까? – DevB2F
예, 하이라이트 색상과 알파를 변경할 수 있습니다. 그러나 이것이 내가 원하는 것입니다. 강조 표시된 막대 주위에만 테두리를 만들고 싶습니다. –