Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩

SwiftUI107

28. [SwiftUI] NavigationView, NavigationLink 화면이동을 위해 간단하지만 강력한 네비게이션 뷰, 링크에 대해 알아보자. 뷰 계층에는 '하나의 네비게이션 뷰'가 있어야 한다. 네비게이선 뷰가 여러개면 네비게이션 바가 여러개 생기는 불상사가... 다른 뷰로 세그웨이(이동)하고 싶으면 네비게이션 링크를 활용하면 된다. 네비게이션뷰, 링크를 활용하면 기본적인 화면전환 애니메이션(push & pop)을 제공받고, 각 화면별 네비게이션 타이틀을 다르게 설정할 수도 있으며 필요한 경우에 특정 뷰에서만 네비게이션바를 사라지게 할 수도 있다. 또한 leading, trailing 네비게이션바 아이템도 버튼처럼 활용 가능하다.(스택도 사용 가능!) // Created by Toughie on 2023/04/27. // import SwiftUI struct Navig.. 2023. 4. 27.
27. [SwiftUI] Popover Views (sheet, transition, offset) .zIndex(), px/pt SwiftUI에서 새로운 뷰를 팝오버 시키는 방법은 다양하다. 이번 시간에는 sheet, transition, offset을 통해 새로운 뷰를 팝오버 하는 방법에 대해 알아보자. sheet // Created by Toughie on 2023/04/26. // import SwiftUI struct Popover: View { //이 변수의 변화에 따라 새로운 뷰를 팝오버 시킴 @State var showSecondScreen: Bool = false var body: some View { ZStack { Color.green.opacity(0.5) .ignoresSafeArea() VStack { Spacer() Button("Button") { showSecondScreen.toggle() } .pa.. 2023. 4. 27.
26. [SwiftUI] 모달 .sheet() & fullscreenCover(), @Environment sheet SwiftUI에서 sheet은 UIKit에서 modal과 유사하게 모달뷰를 표시하는데 사용한다. 유저가 모달뷰를 닫기 전까지 기존 뷰를 덮고, 새로운 뷰를 표시한다. 바인딩 변수를 전달해야 하고, content 클로저에서 조건문을 사용하면 안 되는 점을 주의하자. why? *시트를 통한 뷰는 부모뷰가 생성될 때 같이 생성된다. 먼저 코드의 가독성과 유지보수성 측면에서 단점이 있다. sheet content 클로저 내부에서 조건문을 사용해 다양한 뷰를 표시하려면 코드가 복잡해지고, 중복되는 코드가 발생할 가능성이 있으며 이는 가독성과 유지보수를 어렵게 만든다. -> 각 뷰를 별도의 변수로 추출해서 뷰의 계층 구조를 간결하게 유지하는 방향이 좋다. 다양한 뷰를 띄우는 방식은 다음에 더 자세히 알아.. 2023. 4. 24.
25. [SwiftUI] Transition 기존 뷰 계층에 이미 존재하는 뷰가 아니라, 새로 추가되는 경우 사용 아래 예시코드는 Bool값에 따라 뷰가 새로 그려지고, 사라지고 하는 경우이다. -> transition 사용! (항상 뷰 계층에 존재하는 상황이 아님) // Created by Toughie on 2023/04/23. // import SwiftUI struct Transitions: View { @State var showView: Bool = false var body: some View { ZStack(alignment: .bottom) { VStack { Button("Button") { showView.toggle() } .padding() Spacer() } if showView { RoundedRectangle(corne.. 2023. 4. 23.
24. [SwiftUI] Animation Curves and Timing 애니메이션 속도 조절에 대해 알아보자. 상황에 맞는 애니메이션을 적절히 사용하면 더욱 자연스러운 경험을 제공할 수 있을 것이다. 기본 애니메이션 타이밍 설정 // Created by Toughie on 2023/04/23. // import SwiftUI struct AnimationTiming: View { @State var isAnimating: Bool = false var body: some View { VStack { Button("Button") { isAnimating.toggle() } // * 모든 애니메이션은 같은 타이밍에 종료됨. //MARK: - .default RoundedRectangle(cornerRadius: 20) .frame(width: isAnimating ? 350 .. 2023. 4. 23.
23. [SwiftUI] Animations basic https://developer.apple.com/documentation/swiftui/withanimation(_:_:) withAnimation(_:_:) | Apple Developer Documentation Returns the result of recomputing the view’s body with the provided animation. developer.apple.com withAnimation(_:_:) 바디 부분에서의 변화와 관련있는 모든 대상에 애니메이션 추가. // Created by Toughie on 2023/04/23. // import SwiftUI struct Animations: View { @State var isAnimated: Bool = false var n.. 2023. 4. 23.