[swift] - Swift Charts로 음악 진행도 표시하기

음악 앱을 개발 중이고, 사용자에게 현재 곡의 진행도를 시각적으로 표시하고 싶다면, Swift Charts 라이브러리를 사용해볼 수 있습니다.

1. Swift Charts 라이브러리 가져오기

먼저, 프로젝트에 Swift Charts 라이브러리를 추가해야 합니다. 이를 위해 두 가지 방법을 제안합니다:

방법 1: CocoaPods를 사용하여 가져오기

Podfile 파일을 열고 다음 코드를 추가합니다:

pod 'Charts'

그리고 터미널에서 아래 명령어를 실행합니다:

pod install

방법 2: 수동으로 가져오기

Swift Charts GitHub 페이지에서 최신 릴리즈를 다운로드하여 프로젝트에 직접 추가합니다.

2. 차트 생성하기

2.1. 차트 뷰 추가하기

Storyboard에서 원하는 위치에 차트 뷰를 추가합니다. 그런 다음, 해당 뷰를 커스텀 클래스로 설정해야 합니다.

2.2. 차트 설정하기

import Charts

// ...

let chartView = LineChartView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 300))
self.view.addSubview(chartView)

// 차트에 표시할 데이터 생성
var dataEntries: [ChartDataEntry] = []
for i in 0..<10 {
    let dataEntry = ChartDataEntry(x: Double(i), y: Double(i) * 10) // 해당 점의 x, y 좌표
    dataEntries.append(dataEntry)
}

// 데이터 세트 생성
let chartDataSet = LineChartDataSet(entries: dataEntries, label: "Progress")
let chartData = LineChartData(dataSet: chartDataSet)

// 차트에 적용
chartView.data = chartData

위의 코드에서는 LineChartView를 사용하여 차트를 생성하고, ChartDataEntry를 사용하여 데이터를 생성합니다. 그런 다음, LineChartDataSet과 LineChartData를 사용하여 데이터 세트를 만들고, 차트에 적용합니다.

2.3. 차트 스타일 설정하기

차트의 스타일을 변경하여 원하는 모양으로 꾸밀 수 있습니다.

// 차트 선 색상 및 두께 설정
chartDataSet.colors = [.blue]
chartDataSet.lineWidth = 2.0

// 차트 배경색 설정
chartView.backgroundColor = .white

// X축 레이블 설정
let xAxis = chartView.xAxis
xAxis.labelPosition = .bottom
xAxis.drawGridLinesEnabled = false

// Y축 레이블 설정
let yAxis = chartView.leftAxis
yAxis.labelCount = 6
yAxis.granularity = 10.0
yAxis.drawGridLinesEnabled = true

위의 코드에서는 LineChartDataSet의 colors 및 lineWidth 속성을 사용하여 선의 색상과 두께를 설정하고, LineChartView의 backgroundColor 속성을 사용하여 차트의 배경색을 변경합니다. 또한, xAxis와 yAxis의 속성을 설정하여 X축과 Y축 레이블을 조정할 수 있습니다.

3. 차트 업데이트하기

음악 앱에서는 주기적으로 차트를 업데이트하여 현재 곡의 진행도를 표시해야 할 수 있습니다. 이를 위해 아래의 코드를 참고하여 차트를 업데이트하는 함수를 생성합니다.

func updateChart(with progress: Double) {
    // 새로운 데이터 업데이트
    let newDataEntry = ChartDataEntry(x: Double(dataEntries.count), y: progress)
    dataEntries.append(newDataEntry)

    // 데이터 세트 업데이트
    let chartDataSet = LineChartDataSet(entries: dataEntries, label: "Progress")
    let chartData = LineChartData(dataSet: chartDataSet)
    chartView.data = chartData

    // 화면 갱신
    chartView.notifyDataSetChanged()
    chartView.moveViewToX(Double(dataEntries.count))
}

위의 코드에서는 updateChart 함수가 progress 매개변수를 받아와서 차트 데이터를 업데이트합니다.

참고 자료