일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Swift 기능
- 제앱소
- StateObject
- 애플 디벨로퍼 아카데미 후기
- useReducer
- swift문법
- 앱 비교 프로젝트
- global soop
- 숭실대
- sqoop
- Apple Developer Academy @ POSTECH
- iOS 개발 오류
- apple developer academy 후기
- 네이버 부스트캠프
- 운영체제
- react
- 치지직
- SWIFT
- 데이터베이스
- Swift 디자인패턴
- 네이버 치지직
- 소프트웨어분석및설계
- 데이터베이스 공부
- 애플 디벨로퍼 아카데미 21주차 회고
- 애플 아카데미 후기
- 애플 디벨로퍼 아카데미
- ObservedObject
- ObservableObject
- Swift 문법
- OS
- Today
- Total
사과하는 제라스
[Swift 기능] Card Flip을 구현해보자! 본문
목차
서론
안녕하세요~! 개발자 제라스입니다 🙏🏻🤖🙏🏻
오늘은 좀 가벼운 기능 구현 주제로 카드를 뒤집는 듯한 Flip View를 구현해보고자 합니다.
이번에 아카데미에서 프로젝트를 진행하면서 어떤 '자랑'과 그것에 대한 '상장'을 한 곳에서 예쁘게 보여주는 방식이 뭐가 있을까 싶어서 고민하다가 '카드를 뒤집는 듯한 Flip 기능을 덧붙이면 어떨까' 싶어서 한번 구현해보게 되었습니다.
저 처음에 이거 시간 좀 잡아먹히려나 싶었는데...
정말 30분도 안 걸려서 너무 다행입니다ㅎㅎ 👍🏻😃👍🏻
그럼 간단하게 어떻게 구현했는지 얘기해보겠습니다!
두 View에 대한 Flip 기능 구현
일단 다음 두 View를 플립하는 화면을 구현하려고 했습니다!
여기서 두 View를 뒤집는 걸 구현해봅시다.
우선 코드는 다음과 같습니다.
import SwiftUI
// Card를 뒤집는 동작을 담당하는 Controller
@Observable
class CardPresenter {
var isFlipped: Bool = false
func flip() {
isFlipped.toggle()
}
}
struct CardFlipView: View {
@State var presenter = CardPresenter()
var body: some View {
Group{
if presenter.isFlipped {
AwardView()
} else {
ShowCaseView()
}
}
.cornerRadius(10)
.frame(width: 300,
height: 500)
.onTapGesture {
presenter.flip()
}
.rotation3DEffect(
// 해당 각도로 뒤집어서 만듦. 이때 UI가 자연스레 돌아가는 이유는 하단의 animation 덕분.
.degrees(presenter.isFlipped
? 180
: 0),
// y축을 기준으로 뒤집겠다는 의미
axis: (x: 0,
y: 1,
z: 0)
)
// 자연스럽게 '보이던 View'는 사라지고 '안보이던 View'는 나타나는 효과
.animation(.default, value: presenter.isFlipped)
}
}
이렇게 하면 가로로 뒤집는 모션을 구현할 수 있습니다!
다음처럼요~~!!
하지만 뒤집었더니 View도 뒤집어진 채로 보이죠??
그래서 이걸 어떻게 할까 고민하다가...
그냥 뒤집어진 View를 미리 뒤집어진걸 올려두면 제대로 보이겠더라구요 ㅋㅋㅋㅋㅋㅋㅋ
그래서 다음과 같이 뒤집어두었습니다.
Group{
if presenter.isFlipped {
// scaleEffect를 적용하여 CardView를 반대로 뒤집어 둠.
// rotation3DEffect로 앞 -> 뒤로 뒤집으려 할 때 뒤에 있던 View가 뒤집어진 채로 보이기 때문.
AwardView()
.scaleEffect(x: -1)
} else {
ShowCaseView()
}
}
이러면 ShowCaseView(현재 보이는 View)와 달리 AwardView(아직 안 보이는 View)는 미리 뒤집어져 있기에 180도 회전하면 View가 한번 더 뒤집히기에 제대로 보이게 됩니다.
구현 결과는...
이렇게 완성이 되었습니다! :-D
마무리
제가 생각보다 쉬운 걸 너무 어렵게 바라봤던 것 같습니다.
사실 예전에 네부캠을 하면서 상당히 화려한 Flip 기능을 만들었던 팀이 있는데(Web 프로젝트 팀이긴 했지만...)
그 팀에서 상당히 힘들게 구현했던 것을 보고는 조금 오래걸리려나 싶었거든요 ㅎㅎ
앞으로 프로젝트를 진행하면서 새로 구현해본 것들을 조금씩 포스팅해보겠습니다!
그럼 오늘도 포스팅 읽어주셔서 감사합니다! :-) 👋🏻👋🏻
아직 꼬꼬마 개발자입니다.
더 나은 설명이나 코드가 있다면 언제든 환영입니다.
적극적인 조언과 피드백 부탁드립니다!
그럼 오늘도 개발 가득한 하루되세요!
- Xerath -
🤖🤖🤖🤖🤖🤖🤖
'제라스의 iOS 공부 > Swift 기능' 카테고리의 다른 글
[Swift 기능] Image Caching 처리 in UIKit (1) | 2024.04.29 |
---|---|
[Swift 기능] 화면 간 이동을 구현해보자! 4가지 방법으로(with Segue) (0) | 2023.09.26 |
[Swift 기능] 애니메이션을 구현해보자 (0) | 2023.09.18 |
[Swift 기능] 비밀번호를 가리는 작업을 하자 (0) | 2023.09.18 |
[Swift 기능] Alert 기능을 구현해보자 (0) | 2023.09.18 |