궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFTUI/Image

SwiftUI : trim( ) - Shape의 일부 그리기 (Timer)

서근
QUOTE THE DAY

“ 고객을 ‘유저’라고 부르는 산업은 딱 두 개가 있다. 마약 그리고 IT. ”

- Edward Tufte (에드워드 터프테)
Written by SeogunSEOGUN

SwiftUI : trim( ) - Shape의 일부 그리기 (Timer)

 

 

trim 에 대해 알아보도록 합시다.

Trim

SwiftUI에서는 trim() 수정자를 사용하여 모양에 대한 획 또는 채우기의 일부만 그릴 수 있습니다.

이 수정자는 시작 값(from)과 끝 값(to), 둘 다 CGFloat 01 사이로 저장되는 두 매개 변수를 사용합니다 .

swift
UNFOLDED
 .trim(from: 0, to: 0)

예를들어, 반원을 원한다면 아래와 같이 코드를 작성 할 수 있습니다.

swift
UNFOLDED
Circle()
.trim(from: 0, to: 0.5)
.frame(width: 150, height: 150)

SwiftUI : trim( ) - Shape의 일부 그리기 (Timer) - Trim

시간이 지날수록 도형이 채워지게 하는 방법

첫번째

화면을 실행 하면 자동으로 timer가 네트워크 요청 또는 기타 사용자 인터페이스와 같이 해당 값을 실제로 변경할 수 있는 방법이 필요합니다. 예를들어 몇 초 동안 도형이 화면을 채워 줄 수 있게 할 수 있습니다. timer코드를 추가해주겠습니다.

 

Timer 뒤에 publish 까지 작성하면 자동으로 코드가 생성됩니다.

SwiftUI : trim( ) - Shape의 일부 그리기 (Timer) - 시간이 지날수록 도형이 채워지게 하는 방법 - 첫번째

swift
UNFOLDED
@State private var completionAmount: CGFloat = 0.0
//타이머 설정
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()

두 번째

원하는 도형을 만들어서 그 안에 timertrim 수정자를 넣어 코드를 작성해주겠습니다.

swift
UNFOLDED
Circle()
.trim(from: 0, to: completionAmount)
//선모양 그라데이션
.stroke(AngularGradient(gradient: Gradient(colors: [.red, .yellow, .green, .blue, .purple, .red]), center: .center),lineWidth: 20)
.frame(width: 200, height: 200)

현재 trimCGFloat = 0.0으로 시작돼서 타이머가 지날수록 숫자가 높아지게 됩니다. 그렇기 때문에 자동으로 도형이 점점 채워지는 방식이 되겠죠? :)

세 번째

타이머를 사용하기 위해서는 위에서 변수를 만들어 줬으니 .onReceive를 사용하여 데이터를 탐지하고 액션을 취할 수 있도록 추가해줘야 합니다.

TIP
 
 

onRecevie란? 데이터를 탐지하고 액션을 취하며 event를 내보낼 때 작업을 트리거하는 view 입니다.

swift
UNFOLDED
.onReceive(timer) { _ in
withAnimation {
//만약 completionAmount가 1이라면 0으로 변경, 그게 아니라면 + 0.2씩 증가
if completionAmount == 1 {
completionAmount = 0
} else {
completionAmount += 0.2

자, 이렇게 하고 캔버스를 실행 해보도록 하겠습니다.

SwiftUI : trim( ) - Shape의 일부 그리기 (Timer) - 시간이 지날수록 도형이 채워지게 하는 방법 - 세 번째

시작하는 방향이 오른쪽 중앙부터 시작됩니다. 하지만 만약 12시 방향에서부터 시작하고 싶다면 아래와 같은 코드를 추가할 수 있습니다. (외관상 onRecevie 위에 코드를 작성해주겠습니다)

swift
UNFOLDED
//시계방향으로 돌아갈수 있도록
.rotationEffect(.degrees(-90))

SwiftUI : trim( ) - Shape의 일부 그리기 (Timer) - 시간이 지날수록 도형이 채워지게 하는 방법 - 세 번째

전체 코드

swift
FOLDED

 

 

읽어주셔서 감사합니다🤟

 

본 게시글의 전체코드 GitHub 👇🏻

 

Seogun95/SwiftUI_TimerWithTrim_TUT

Tirm을 사용하여 Timer을 만들어보겠습니다. Contribute to Seogun95/SwiftUI_TimerWithTrim_TUT development by creating an account on GitHub....

github.com

 

 


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.