일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- 가상 메모리
- 오브젝트
- scrollview
- decode
- UserDefaults
- struct
- 동기화
- async
- 비동기
- Linked List
- 운영체제
- Swift
- @state
- 인프런
- COLOR
- 데드락
- deadlock
- 동시성
- 프로세스 스케줄링
- IOS
- Codable
- forEach
- Apple Developer Academy
- SwiftUI
- 앨런
- Algorithm
- 상호배제
- core data
- 100 days of SwiftUI
Archives
- Today
- Total
기어가더라도 제대로
[SwiftUI-기초] Shape 를 애니메이션 주기 - animatableData 본문
struct Trapezoid: Shape {
var insetAmount: Double
func path(in rect: CGRect) -> Path {
var path = Path()
path.move(to: CGPoint(x: 0, y: rect.maxY))
path.addLine(to: CGPoint(x: insetAmount, y: rect.minY))
path.addLine(to: CGPoint(x: rect.maxX - insetAmount, y: rect.minY))
path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
path.addLine(to: CGPoint(x: 0, y: rect.maxY))
return path
}
}
struct ContentView: View {
@State private var insetAmount = 50.0
var body: some View {
Trapezoid(insetAmount: insetAmount)
.frame(width: 200, height: 100)
.onTapGesture {
withAnimation {
insetAmount = Double.random(in: 10...90)
}
}
}
}
- 탭 될 때마다 사각형의 윗변이 변화하는 애니메이션을 그리고 싶음
- withAnimation {} 덕분에 애니메이션이 될거같은데 그렇지 않음
- 값이 변할 때마다 그 사이 값을 반영을 해야할텐데, 그게 아니라 이전 값에서 다음 값으로 바로 점프를 함
- Binding 된 값이 변화하기 전에 뷰의 상태를 본 후 값이 변화한 다음에 뷰의 상태를 점검해서 다시 뷰를 그린다.
- [현실] 탭을 해서 새로운 랜덤값으로 즉시 넘어감: 50 -> 55
- [이상] 50, 51, 52, 53, 54, 55
animatableData
var animatableData: Double {
get { insetAmount }
set { insetAmount = newValue }
}
- 이 연산 프로퍼티를 Trapezoid 구조체에 추가
- SwiftUI 적으로는 랜덤한 값으로 바로 가지만, 스크린 내부적으로는 애니메이션을 위해 상태 변화 값을 추적하게 함
- animatableData의 값은 애니메이션이 진행될 수록 목적한 값(insetAmount)에 가까워짐
'SwiftUI - 기초' 카테고리의 다른 글
[SwiftUI-기초] UserDefaults 와 SwiftUI (0) | 2022.11.23 |
---|---|
[SwiftUI-기초] Shape 를 복잡한 애니메이션 주기 (0) | 2022.11.22 |
[SwiftUI-기초] BlendMode - 색상 혼합 (0) | 2022.11.20 |
[SwiftUI-기초] CGAffineTransform - 약간의 기하학을 곁들인.. (0) | 2022.11.19 |
[SwiftUI-기초] drawingGroup() - Image 성능 높이기 (0) | 2022.11.18 |
Comments