Skip to content

levitatingpineapple/domain-gesture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

DomainXGesture

DomainXGesture uses .chartXScale(domain:) modifier, in combination with UIKit based gesture recognizer to control the Chart's horizontal domain.

Preview

graph.mp4

Example

import SwiftUI
import Charts
import DomainGesture

struct DataPoint: Hashable, Identifiable {
    let date: Date
    let value: Double
    var id: Date { date }
}

func future(after seconds: Int = .zero) -> Date {
    Date.distantFuture.addingTimeInterval(TimeInterval(seconds))
}

let dataPoints = (0..<1000).map { seconds in
    DataPoint(
        date: future(after: seconds),
        value: .random(in: 0...10)
    )
}

struct ChartView: View {
    @State var domain: ClosedRange<Date> = future()...future(after: 1000)
    
    var body: some View {
        Chart(dataPoints.filter { domain.contains($0.date) }) { dataPoint in
            LineMark(
                x: .value("Date", dataPoint.date),
                y: .value("Value", dataPoint.value)
            )
        }
        .chartXScale(domain: domain)
        .gesture(DomainXGesture(domain: $domain))
    }
}

About

Pan + Zoom gesture for SwiftUI charts

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages