본문 바로가기

SwiftUI

(5)
[SwifUI] IgnoreSafeArea수정자 정확하게 이해하기 안녕하세요 주니오스입니다. ✋✋✋✋ iOS개발을 해보신 분이라면 SafeArea에 대해 한번쯤은 들어보셨을 것이라고 생각합니다. 정확한 개념이 잡히지 않는 것같아 글로 정리해 보려고 합니다. SafeArea란? 최신? iPhone은 상단에는 다이나믹 아일랜드가 하단에는 탭을 닫을 수 있는 바(Bar)가 있는 것을 확인할 수 있습니다. 이러한 요소들이 화면상에 명확하게 표시되는 것을 보장하기위해 SafeAreaInset이라는 개념이 존재합니다. SafeAreaInset은 화면전체 영역과 SafeArea간의 간격을 의미합니다. 그렇습니다. SafeArea란 해당 간극(Insets)을 배재한 공간을 의미합니다. 하지만 주의해야 할 점이 있습니다. 모든 뷰가 같은 Inset을 가지는 것이 아닙니다. 앞서 설명한..
[SwiftUI] View좌표계이해를 통한 addArc사용 안녕하세요! 주니오스 입니다. ✋✋✋ 최근에 저는 개인프로젝트를 진행하고 있습니다. 탭뷰를 사용하여 네비게이팅을 하려고합니다. 하지만 단순하고 각진 기본 탭뷰에 만족을하지 못했던 저는 단조로운 직선에 곡률을 더하고자 하였습니다.😎 하지만 이 과정이 생각보다 순탄하지 않았던 터라 포스팅을 통해 정리하기 위해 글을 적습니다. 😅 우선 최종적으로 완성한 저의 탭뷰를 먼저 보고 출발해봅시다~! 🤗 탭뷰의 바가 살짝휘어져 있는 것을 확인할 수 있습니다. 그리고 특정 탭 아이템을 누를 때 휘어져있는 탭바 위로 움직이는 막대가 있습니다. 🤗 위 뷰에서 사용된 곡선을 만들기위해 저는 Shape프로토콜을 사용하였습니다. Path인스턴스는 addArc라는 매서드를 가지는데 해당 매서드를 사용하여 구현하였습니다. Path...
[SwiftUI] 뷰(View)가 여러개인 경우 효율적인 애니메이션 스케쥴링 방법 안녕하세요 iOS공부를 하고있는 주니오스라고 합니다. 최근에 제가 혼자 프로젝트를 진행하고 있는데요. 한 스크린에 여러가지 뷰들이 상화작용하여 움직이는 형태를 구현하려 했습니다. 각 뷰의 애니메이션 상태를 중앙집중식으로 관리하기 위해 아래 사진과 같은 구조를 선택했습니다. 이구조의 장점은 다음과 같습니다. View들 담고있는 Screen에서 상태변화를 발생시킬 경우 바인딩을 통해 뷰들을 관리할 수 있다. 구조적인 애니메이션 구현이 가능하다. 뷰의 상태를 관리하기 위해 각 뷰마다 자신의 애니메이션 상태를 저장하는 ViewState타입이 존재합니다. 아래 코드는 실제로 구현한 ViewState코드 입니다. 아래코드는 Screen코드의 일부입니다. State랩퍼로 각 뷰의 상태를 저장하고 Binding관계를 ..
[SwiftUI] Transition사용법 심층정리 - 주니오스의 iOS어드벤쳐 개요 안녕하세요! SwiftUI를 처음 배울당시 Transition을 뷰에 적용하는 것에 많은 시행착오를 격었었습니다. 🥹 명확하게 글로 정리하여 참고하면 좋을 것 같아 글을 작성하였습니다! Transition이 사용될 수 있는 경우 기본적으로 Transition은 랜더링되어 있는 뷰가 사라지거나 나타나는 경우에 사용될 수 있습니다. 자주 사용되는 경우로는 아래 3가지경우가 있습니다. if문 사용 switch문 사용 List, Foreach에 전달된 아이템 소스의 변동 Transition사용하기 Transition은 기본적으로 애니메이션과 함께 사용되어야 합니다. 하지만 아시다시피 애니메이션을 적용할 수 있는 방법은 크게 2가지 있습니다. 명시적 애니메이션(explicit animation) withAn..
[SwiftUI] UIViewRepresentable사용 개요 UIViewRepresentable프로토콜을 사용하여 UIKit에서 사용되는 뷰들을 SwiftUI환경에서 랜더링할 수 있다. 해당 프로토콜을 채택하는 구조체는 SwiftUI에서 다른 뷰들처럼 사용될 수 있다. 프로토콜의 요구사항에 대해 우선 알아보자. (Required) makeUIView(context:) 애 매서드는 View Object(SwiftUI 구조체)를 생성할 때 단 한번만 호출된다. 매개변수로 전달받는 context에 담긴 정보를 사용하여 반환할 뷰(UIKit view)의 초기설정을 할 수 있다. 아래코드는 구조체의 프로퍼티로 선언한 뷰들의 초기설정을 수행하고 반환하는 예시이다. let label = UILabel() let container = UIView() ... func mak..