ChartView highlightValueWithX λ©μλκ° v3.0 + Swift3.0μμ μλνμ§ μλ κ² κ°μ΅λλ€.
Xcode 8 / λ§μ€ν° λΈλμΉ / Objc.
@PhilJay highlightValue(x...)
ν¨μλ νμ΄λΌμ΄νΈ λ λλ¬κ° Y κ°μ΄μμ κ²μΌλ‘ μμνκΈ° λλ¬Έμ μ€ν¨ν©λλ€. κ²°κ³Όλ NaNμΌλ‘, μ무λ°λ λ λλ§λμ§ μμ΅λλ€.
Androidμ iOS λͺ¨λ?
λ€...
ν ... μ½λλ₯Ό μ΄ν΄ 보μλλ°, μ΄κ±΄ κΉλ€λ‘μ΄ λ¬Έμ μ λλ€. λμΌν x μμΉμ μ¬λ¬ νλͺ©μ΄μλ κ²½μ° y μμΉλ₯Ό μ§μ νμ§ μμΌλ©΄ νΉμ νλͺ©μ μ±κ³΅μ μΌλ‘ κ°μ‘° νμ ν μ μμ΅λλ€.
μ΄ λ°©λ²μ μμ ν΄μΌν κΉμ?
λ λ€λ₯Έ μ΅μ
μ λ°©λ²μ y μμΉλ₯Ό λ§€κ° λ³μλ‘ ν¬ν¨νλ κ²μ
λκΉ?
λ¬Έμ λ ν°μΉ μ΄λ²€νΈμμ μ ννλ κ²μΌλ‘ μμν©λλ€. λμΌν xμ μ¬λ¬ κ°μ΄μλ λΆμ° ν λλ κ±°ν ν μ°¨νΈκ°μλ κ²½μ° μ¬μ ν μ€μ λ‘ μλνμ§ μμ΅λλ€. μ€μ λ‘ X μΆμ ν°μΉ μμΉμ λ°λΌ λμΌν xμμ 첫 λ²μ§Έ λλ λ§μ§λ§ νλλ₯Ό μ νν©λλ€!
μ°λ¦¬κ° κ·Έκ²μ κ³ μΉ ν-μκ³ λ¦¬μ¦μ΄ Y κ°μ μ·¨νλ κ²μ μκ³ μ¬λ°λ₯Έ Xμ λλ¬νλ©΄ μ¬λ°λ₯Έ Yλ₯Ό κ²μνκΈ° μμν©λλ€.
κ·Έλ° λ€μ λ³λμ λ°©λ²μΌλ‘ Y κ°μ μ λ¬ν μμλ μ΅μ
μ΄ μμ΅λλ€! :-)
Xλ‘ κ°λ¨ν κ°μ‘°νλ μλ³Έμ λ§€μ° μ μ©νλ©° λ§μ μ¬λλ€μ΄ λ¬Έμ λ‘ νλ¨νμ¬ μ΄μ μμ‘΄ν©λλ€ ... κ·Έλμ μ°λ¦¬κ° κ·Έκ²μ μ κ±°νλ©΄ μ¦μ€ λ©μΌμ λ°κ²λ©λλ€ :-)
κΊΎμ μ ν μ°¨νΈ νλͺ©μ νλ‘κ·Έλλ° λ°©μμΌλ‘ κ°μ‘° νμνκΈ°μν νμ¬ ν΄κ²° λ°©λ²μ΄ μμ΅λκΉ? νμ¬ λͺ¨λ νμ΄λΌμ΄νΈ λ°©λ²μ΄ κΉ¨μ‘μ΅λκΉ?
@apurva λΌμΈ μ°¨νΈλ μ μλν©λλ€. μ΅μ mater λΆκΈ°λ‘ ChartsDemoλ₯Ό νμΈνμ΅λλ€.
μ μ°¨νΈμμ μ¬μ ν μλνμ§ μλ νλ‘κ·Έλλ° λ°©μμΌλ‘ κ°μ‘° νμν©λλ€.
λ§μ§λ§ κ°μ κ°μ‘°νλ €κ³ ν©λλ€.
[self.lineChartView highlightValueWithX:self.lineChartView.chartXMax dataSetIndex:0 callDelegate:YES];
κ·Έλ¬λ λ리μ λ©μλμμ-(void) chartValu eSelected : entry : highlight : highlight.xPx λ° highlight.yPxλ NaNμ λλ€.
highlightValueWithXκ° μλνμ§ μλλ€λ κ²μ λ€μ νμΈν μ μμ΅λλ€.
νμ΄λΌμ΄νΈλ₯Ό λ§λ€μ΄ 보μμ΅λλ€
ChartHighlight * high = [[ChartHighlight alloc]initWithX:(double)someInt dataSetIndex:0];
κ·Έκ²κ³Ό ν¨κ» highlightValueWithHighlight λ©μλλ₯Ό μ¬μ©νμ§λ§ μ¬μ ν κ°μ‘° νμλμ§ μμ΅λλ€. chartValueSelected : entry : highlight : delegate λ©μλκ° νΈμΆλ©λλ€.μ΄ λ©μλλ νλͺ© κ°μ²΄μ μ¬λ°λ₯Έ κ°μ ν¬ν¨νμ§λ§ κ°μ‘° κ°μ²΄μ y κ°μλ NaNμ΄ μμ΅λλ€.
y κ°λ ν¬ν¨νλ ChartHighlight * κ°μ²΄λ₯Ό λ§λλ λ°©λ²μ΄ μμ΅λκΉ? ChartHighlight ν΄λμ€μ λν λ€μν init λ©μλκ° μμ§λ§ λ€λ₯Έ λͺ¨λ λ©μλμλ μ λ ν½μ μμΉκ° νμν©λλ€.
@ liuxuan30 μ°¨νΈ λ°λͺ¨μ μ΄λ λΆλΆμ΄ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ°¨νΈλ₯Ό κ°μ‘°νλμ§ μ§μ ν μ μμ΅λκΉ?
λλ κ°μ‘° νμλ₯Ό μ¬μ©νλ κ² μΈμ λ€λ₯Έ λ©μ»€λμ¦μμ νμ¬ μ νν νλͺ©μ νμνλ λ°©λ²μ΄ μμ΅λκΉ?
Chartsλ ν¬μ»€μ€ νκ²½μ μ§μνμ§ μμΌλ©° μ°¨νΈμ λν μ¬μ©μ μνΈ μμ©μ λ΄μ₯ λ μ μ€μ² μΈμκΈ°μ μμ‘΄νλ λμ νλ‘κ·Έλλ° λ°©μμΌλ‘ μ²λ¦¬λμ΄μΌνκΈ° λλ¬Έμ TVOSμ μ λμ μΌλ‘ νμν©λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ‘컬 볡μ¬λ³Έμμ λ€μμ μννμ΅λλ€.
Highlight.swiftμμ y κ°μλ°λ μ΄λμ λΌμ΄μ λ₯Ό μΆκ°ν©λλ€.
/// - parameter x: the x-value of the highlighted value
/// - parameter y: the y-value of the highlighted value
/// - parameter dataSetIndex: the index of the DataSet the highlighted value belongs to
public init(x: Double, y: Double, dataSetIndex: Int)
{
_x = x
_y = y
_dataSetIndex = dataSetIndex
}
κ·Έλ° λ€μ νλ‘κ·Έλλ° λ°©μμΌλ‘ κ°μ‘° νμνλ €λ©΄ λ€μκ³Ό κ°μ΄ν©λλ€.
let entry = //... the ChartDataEntry I want to highlight
self.chart.highlightValue(
Highlight(x: entry.x, y: entry.y, dataSetIndex: 0)
)
λλ μ΄κ²μ΄ μμΌλ‘ λμκ° μμλ μ μ ν μ κ·Ό λ°©μμΈμ§ μκΈ°μ μ½λμ λν΄ μΆ©λΆν μ΅μνμ§ μμ΅λλ€. μ΄ κ²½μ°, λλ ν κ°μ§κ² μ΅λκΉ λμμ΄λΌκ³ μκ° ChartData.highlightForEntry() -> Highlight
μ μμ μν μνκΈ° ChartData.entryForHighlight()
μ€μ λ‘ μμΈν μ΄ν΄λ³΄λ©΄ λΌμΈ μ°¨νΈμ μ μ©λμ§ μμ μΌλΆ λ€λ₯Έ λ λλ¬μ λν μ΅κ·Ό μμ μ¬νμ΄ μμμ λ°κ²¬νμ΅λλ€.
μ΄ μ»€λ°μμ :
https://github.com/danielgindi/Charts/commit/8905a46c8262998ccdb780bbd5d2c03e45b8ab5a#diff -52d760df99fc778bb8222bd3cc9ce413R225
x
λ° y
λ³μλ Highlight h
μλλΌ entry
μμ κ°μ Έ μ€λλ‘ λ³κ²½λμμ΅λλ€. LineChartRenderer
μλ λμΌν μμ μ΄ μ μ©λλ©΄ λ¬Έμ κ° ν΄κ²° λ κ²μ΄λΌκ³ μκ°ν©λλ€.
λλ κ·Έκ²μ μν ν΄λ³΄κ³ μ€λ μκ°μ΄ νλ½νλ ν μ€λΉλμ΄ μκΈ°λ₯Ό λ°λλλ€.
λν κ° μ‘°μ μ΄ contentTopμμ contentBottomμΌλ‘ μ΄λνκΈ° λλ¬Έμ y Valueκ° μ€μ λ‘ μ¬μ© λ κ²μ²λΌ 보μ΄μ§ μμ΅λλ€. λ¬Έμ μ μμΈμ μ€μ λ‘ λ€μκ³Ό κ°μ΅λλ€.
let pt = trans.pixelForValues(x: x, y: y)
y
μ΄ NaN
μ΄λ©΄ pt.xλ NaN
λ‘ λμ΅λλ€. μ΄κ²μ μ€μ λ‘ Swift 3 / CoreGraphics λ²κ·Έλ‘ 보μ
λλ€. μ¬κΈ° Swift Replμμ μ¦λͺ
λμμ΅λλ€.
7> import CoreGraphics
8> let trans = CGAffineTransform(scaleX: 1.0, y: 1.0)
trans: CGAffineTransform = {
a = 1
b = 0
c = 0
d = 1
tx = 0
ty = 0
}
9> let pt = CGPoint(x: 1.0, y: Double.nan)
pt: CGPoint = (x = 1, y = NaN)
10> pt.applying(trans)
$R2: CGPoint = (x = NaN, y = NaN)
@apurva μ¬κΈ°μμ λ΄ fix-1495
μ§μ μ μ¬μ©ν΄ λ³Ό μ μμ΅λκΉ?
https://github.com/ryanschneider/Charts/tree/fix-1495
μμλλ‘ μλνλμ§ νμΈ νμκ² μ΅λκΉ? κ·Έκ²μ λλ₯Ό μν΄ μΌνκ³ μμ΅λλ€. @danielgindi & @ liuxuan30 , μ λ ScatterChartRenderer
μμ μ½λλ₯Ό λ€μ 볡μ¬νμ§λ§ LineChartRenderer
μμλ if x > chartXMax * animator.phaseX
νμΈμ μΆκ°νμ΅λλ€.
λλ set.entriesForXValue(high.x)
μ΄μμ λ°λ³΅ ν νμλ _ μκ°νμ§ μμ§λ§ _ νμ¬λ κ·Έλ μ΅λλ€. νλ μ΄μμ νλͺ©μ΄ μμ΄μλ μλκΈ° λλ¬Έμ ν΄κ° λ κ² κ°μ§λ μμ§λ§, κ·Έ μ¬μ€μ νμΈν μ μλ€λ©΄ κΈ°κΊΌμ΄ set.entryForXValue(high.x)
ν΅νλ‘ μ μ΄μ PRμ 보λ΄κ² μ΅λλ€.
νκ· ν μ€νΈ νμ΄λΌμ΄νΈ λ²κ·Έλ₯Ό μ§μνκΈ° μν΄ ChartsDemoμ νλ‘κ·Έλλ° λ°©μμ νμ΄λΌμ΄νΈ μ΅μ μ μΆκ°νλ κ²λ μ’μ§λ§,μ΄λ₯Ό μννλ λ° νμν μ¬νμ μ‘°μ¬νμ§ μμμ΅λλ€.
@ryanschneider μ λ Έλ ₯μ κ°μ¬λ립λλ€! @danielgindi λΉμ μ μ΄λ»κ² μκ°ν©λκΉ?
@ryanschneider κ·νμ λ Έλ ₯μ κ°μ¬λ립λλ€. λΆκΈ°μμ λ³κ²½ μ¬νμ μλνμ§λ§ highlightValueWithX λ° highlightValueWithHighlight λ©μλ λͺ¨λ μ¬μ ν μ μκ² μλνμ§ μμ΅λλ€. κ°μ‘° νμμ y κ°μ μ¬μ ν ββNaNμ΄λ©° νλ‘κ·Έλλ° λ°©μμΌλ‘ νΈμΆ λ λ κ°μ‘° νμκ° μ°¨νΈμ κ·Έλ €μ§μ§ μμ΅λλ€.
@danielgindi https://github.com/danielgindi/Charts/commit/32a5952cae25f864c5fd3a449e4f413da7f36f9b μ 컀λ°μ ν¬ν¨νμ¬ μ΅μ λ§μ€ν°λ‘ λ°©κΈ ν μ€νΈνμ΅λλ€.
highlightValueWithXλ μ¬μ ν κ° μ‘°μ μ νμνμ§ μμ΅λλ€. λ리μκ° μμλκ³ κ°μ‘° νμμ y κ°μ λ리μμμ μ¬μ ν NaNμ λλ€. μ΄μ μ κ²½μ°μ κ°μ΄ μ μ€μ² μΈμκΈ°λ₯Ό ν΅ν κ°μ‘° νμλ κ°μ‘° μ μ νμνμ§λ§ highlightValueWithXκ° νΈμΆ λ κ²½μ°μλ§ νμλ©λλ€.
μ¬μ ν μλνμ§ μμ΅λλ€.
μ¬μ ν Swift 3μμ λλ₯Ό μν΄ μλνμ§ μμ΅λλ€.
`class ChartsViewController : UIViewController {
<strong i="7">@IBOutlet</strong> var lineChartView: LineChartView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
let unitsSold = [20.0, 4.0, 6.0, 3.0, 12.0, 16.0]
setChart(dataPoints: months, values: unitsSold)
}
func setChart(dataPoints: [String], values: [Double]) {
var dataEntries: [ChartDataEntry] = []
for i in 0..<dataPoints.count {
let dataEntry = ChartDataEntry(x: Double(i), y: values[i])
dataEntries.append(dataEntry)
}
let lineChartDataSet = LineChartDataSet(values: dataEntries, label: "Units Sold")
let lineChartData = LineChartData(dataSet: lineChartDataSet)
lineChartDataSet.highlightLineWidth = 2
lineChartDataSet.highlightColor = UIColor.red
lineChartView.data = lineChartData
lineChartView.highlightValue(x: 3, dataSetIndex: 0)
}
}`
λ€μ νμ λ³κ²½νμμμ€. lineChartView.highlightValue (x : 3, dataSetIndex : 0)
to : lineChartView.highlightValue (Highlight (x : 3, y : 0, dataSetIndex : 0)
μ¬λ¬ λ°μ΄ν° μΈνΈκ°μλ μ κ·Έλνμμ ay : 0μ μ§μ νλ €κ³ νμ§λ§ μ¬μ ν μλνμ§ μμ΅λλ€. μ΄κ²μ λν μ λ°μ΄νΈκ° μμ΅λκΉ? κ½€ ν° λ²κ·Έμ λλ€.
Objective Cμμ μ ννμ΅λλ€.
κ°μ‘° νμλ κ°μ μμΉλ₯Ό ββμμ λ΄κΈ°μν μ½κ°μ ν΄νΉ
// Highlight set programmatically
let dataEntry = dataEntries[linechartData.entryCount-1]
self.lineChartView.highlightValue(Highlight(x:` dataEntry.x, y:dataEntry.y, dataSetIndex: 0), callDelegate:` true)
func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
var markerPosition = CGPoint(x:highlight.xPx, y: highlight.yPx)
// Hack to get the real position of the highlight programaticaly
if markerPosition.x.isNaN || markerPosition.y.isNaN{
let transformer = lineChartView.getTransformer(forAxis: lineChartView.leftAxis.axisDependency)
let pt = transformer.pixelForValues(x: entry.x, y: entry.y)
markerPosition.x = pt.x
markerPosition.y = pt.y
}
}
ν΄νΉ, jndefosseλ₯Ό μλνμ§λ§ νλͺ©μ΄ κ°μ‘° νμ λ λλ§ λ μ΄λΈμ νμνλ ν¨μλ₯Ό μ΄λ»κ² νΈμΆ ν μ μμ΅λκΉ?
μ΄ λ²κ·Έκ° μμ λμμ΅λκΉ? iOS 13.5 Swift 5.1μ νμ΄ μ°¨νΈμμ μΉμ μ κ°μ‘° νμ ν μμλ κ² κ°μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λ€μ νμ λ³κ²½νμμμ€. lineChartView.highlightValue (x : 3, dataSetIndex : 0)
to : lineChartView.highlightValue (Highlight (x : 3, y : 0, dataSetIndex : 0)