Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 39ffa831df | |||
| 7fd5b185f8 | |||
| ebaaf81d19 |
@@ -41,19 +41,11 @@ public class ChartData: ObservableObject {
|
||||
}
|
||||
|
||||
var normalisedYRange: Double {
|
||||
if let _ = rangeY {
|
||||
return 1
|
||||
}
|
||||
|
||||
return (normalisedPoints.max() ?? 0.0) - (normalisedPoints.min() ?? 0.0)
|
||||
return rangeY == nil ? (normalisedPoints.max() ?? 0.0) - (normalisedPoints.min() ?? 0.0) : 1
|
||||
}
|
||||
|
||||
var normalisedXRange: Double {
|
||||
if let _ = rangeX {
|
||||
return 1
|
||||
}
|
||||
|
||||
return (normalisedValues.max() ?? 0.0) - (normalisedValues.min() ?? 0.0)
|
||||
return rangeX == nil ? (normalisedValues.max() ?? 0.0) - (normalisedValues.min() ?? 0.0) : 1
|
||||
}
|
||||
|
||||
var isInNegativeDomain: Bool {
|
||||
|
||||
@@ -8,4 +8,10 @@ extension View {
|
||||
public func chartStyle(_ style: ChartStyle) -> some View {
|
||||
self.environmentObject(style)
|
||||
}
|
||||
|
||||
public func toStandardCoordinateSystem() -> some View {
|
||||
self
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,13 +17,11 @@ struct ChartGridShape_Previews: PreviewProvider {
|
||||
Group {
|
||||
ChartGridShape(numberOfHorizontalLines: 5, numberOfVerticalLines: 0)
|
||||
.stroke()
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
|
||||
ChartGridShape(numberOfHorizontalLines: 4, numberOfVerticalLines: 4)
|
||||
.stroke()
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
|
||||
@@ -21,4 +21,9 @@ extension LineChart {
|
||||
self.chartProperties.lineStyle = style
|
||||
return self
|
||||
}
|
||||
|
||||
public func withAnimation(_ enabled: Bool) -> LineChart {
|
||||
self.chartProperties.animationEnabled = enabled
|
||||
return self
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,19 +33,7 @@ public struct Line: View {
|
||||
geometry: geometry,
|
||||
backgroundColor: backgroundColor)
|
||||
}
|
||||
LineShapeView(chartData: chartData,
|
||||
chartProperties: chartProperties,
|
||||
geometry: geometry,
|
||||
style: style,
|
||||
trimTo: didCellAppear ? 1.0 : 0.0)
|
||||
.animation(Animation.easeIn(duration: 0.75))
|
||||
if self.showIndicator {
|
||||
IndicatorPoint()
|
||||
.position(self.getClosestPointOnPath(geometry: geometry,
|
||||
touchLocation: self.touchLocation))
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
}
|
||||
lineShapeView(geometry: geometry)
|
||||
}
|
||||
.onAppear {
|
||||
didCellAppear = true
|
||||
@@ -53,17 +41,24 @@ public struct Line: View {
|
||||
.onDisappear() {
|
||||
didCellAppear = false
|
||||
}
|
||||
// .gesture(DragGesture()
|
||||
// .onChanged({ value in
|
||||
// self.touchLocation = value.location
|
||||
// self.showIndicator = true
|
||||
// self.getClosestDataPoint(geometry: geometry, touchLocation: value.location)
|
||||
// })
|
||||
// .onEnded({ value in
|
||||
// self.touchLocation = .zero
|
||||
// self.showIndicator = false
|
||||
// })
|
||||
// )
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private func lineShapeView(geometry: GeometryProxy) -> some View {
|
||||
if chartProperties.animationEnabled {
|
||||
LineShapeView(chartData: chartData,
|
||||
chartProperties: chartProperties,
|
||||
geometry: geometry,
|
||||
style: style,
|
||||
trimTo: didCellAppear ? 1.0 : 0.0)
|
||||
.animation(Animation.easeIn(duration: 0.75))
|
||||
} else {
|
||||
LineShapeView(chartData: chartData,
|
||||
chartProperties: chartProperties,
|
||||
geometry: geometry,
|
||||
style: style,
|
||||
trimTo: 1.0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,14 +14,12 @@ struct LineBackgroundShape_Previews: PreviewProvider {
|
||||
GeometryReader { geometry in
|
||||
LineBackgroundShape(data: [(0, -0.5), (0.25, 0.8), (0.5,-0.6), (0.75,0.6), (1, 1)])
|
||||
.fill(Color.red)
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
}
|
||||
GeometryReader { geometry in
|
||||
LineBackgroundShape(data: [(0, 0), (0.25, 0.5), (0.5,0.8), (0.75, 0.6), (1, 1)])
|
||||
.fill(Color.blue)
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ struct LineBackgroundShapeView: View {
|
||||
backgroundColor.endColor]),
|
||||
startPoint: .bottom,
|
||||
endPoint: .top))
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,11 @@ struct LineShape_Previews: PreviewProvider {
|
||||
Group {
|
||||
LineShape(data: [(0, 0), (0.25, 0.5), (0.5,0.8), (0.75, 0.6), (1, 1)])
|
||||
.stroke()
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
|
||||
LineShape(data: [(0, -0.5), (0.25, 0.8), (0.5,-0.6), (0.75,0.6), (1, 1)], lineStyle: .straight)
|
||||
.stroke()
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,8 +31,7 @@ struct LineShapeView: View, Animatable {
|
||||
startPoint: .leading,
|
||||
endPoint: .trailing),
|
||||
style: StrokeStyle(lineWidth: chartProperties.lineWidth, lineJoin: .round))
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
.clipped()
|
||||
if chartProperties.showChartMarks {
|
||||
MarkerShape(data: chartData.normalisedData)
|
||||
@@ -40,8 +39,7 @@ struct LineShapeView: View, Animatable {
|
||||
.fill(.white,
|
||||
strokeBorder: chartMarkColor,
|
||||
lineWidth: chartProperties.lineWidth)
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,13 +13,11 @@ struct MarkerShape_Previews: PreviewProvider {
|
||||
Group {
|
||||
MarkerShape(data: [(0, 0), (0.25, 0.5), (0.5,0.8), (0.75, 0.6), (1, 1)])
|
||||
.stroke()
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
|
||||
MarkerShape(data: [(0, -0.5), (0.25, 0.8), (0.5,-0.6), (0.75,0.6), (1, 1)])
|
||||
.stroke()
|
||||
.rotationEffect(.degrees(180), anchor: .center)
|
||||
.rotation3DEffect(.degrees(180), axis: (x: 0, y: 1, z: 0))
|
||||
.toStandardCoordinateSystem()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ public class LineChartProperties: ObservableObject {
|
||||
@Published var showChartMarks: Bool = true
|
||||
@Published var customChartMarksColors: ColorGradient?
|
||||
@Published var lineStyle: LineStyle = .curved
|
||||
|
||||
@Published var animationEnabled: Bool = true
|
||||
public init() {
|
||||
// no-op
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user