| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- combine
- HIG
- 리펙토링
- 스위프트
- UITextView
- ribs
- swiftUI
- 리팩토링
- MVVM
- Clean Code
- Human interface guide
- tableView
- clean architecture
- swift documentation
- rxswift
- ios
- scrollview
- RxCocoa
- SWIFT
- uiscrollview
- Xcode
- collectionview
- Observable
- Protocol
- UICollectionView
- 클린 코드
- map
- uitableview
- 애니메이션
- Refactoring
- Today
- Total
목록swiftUI (181)
김종권의 iOS 앱 개발 알아가기
Animation 매크로원래는 아래와같은 애니메이션을 구현할땐 애니메이션을 커스텀해야햐하므로 AnimatableData를 사용하여 커스텀해야함코드) 여기서 중요한 점은 드로잉 방향이 내장된 애니메이션에 의해 원하지 않는 방향으로 드로잉 되는데 이것을 제거해주는 코드를 구현하려면 아래처럼 많은 코드가 필요SwiftUI에서는 @Animatable 매크로와 @AnimatableIgnores를 통해 내장된 애니메이션 기능 비화성화도 가능예를 들어, 드로잉 방향이 원하지 않는 방향으로 될때 @AnimatableIgnores를 사용하여 제거WebView와 WebPageWebPage라는 Observable 모델이 생겼고 이 instance를 WebView에 넣어서 사용page instance에서 load하여 url을..
Liquid Glass기존 TabView를 사용하면 자동으로 Liquid Glass 형태로 보여짐TabView { }toolbar 사용해도 상단 버튼들이 Liquid glass로 표현됨스크롤하면 가장자리를 흐림처리함검색바인체공학적으로 쉽게 처리하기위해 검색바는 키보드 바로 위에붙게됨TabView안에 있는 Tab에 role 파라미터에 .search만 넣어도 검색바를 보여주게 할 수 있음변경된 Control UI (Toggle, Picker, Slider)Liquid glass 형태로 버튼이 동작함 Scroll Performance원래는 Lazy Stack들이 여러개 중첩되어 있을 땐, lazy하게 동작되지 않았지만 이제는 lazy하게 동작됨VStack안에 Carousel같은 UI를 하고싶을땐 기존에 중첩되..
배열 향상 - InlineArray새로운 API (Swift 6.2+)InlineArray속도가 더 빠름기존 Array처럼 유연성은 줄어들지만, 그 대신 속도와 메모리 효율이 훨씬 뛰어남기존 Array의 단점을 보완해줌동적 크기 조정을 위해 데이터를 힙(heap)에 저장하는데, 크기를 넘어서면 새로운 메모리를 할당하고 복사하는 오버헤드가 발생하고 성능에 민감한 코드를 작성할 때 비효율적임만약 더 많은 요소가 저장되는경우 메모리에서 동작하는 과정?Heap에 새로운 메모리를 할당하고 기존 요소들을 복사과정이 필요 InlineArray의 경우 heap에 별도로 저장하지 않고 Stack에 저장함사용 방법Array같이 사용하며 아래에 요소의 갯수와 타입은 생략 가능 (컴파일가 알아서 추가해줌)Array vs In..
Subprocess말 그대로 프로세스들을 관리해주는 모듈import Subprocess를 하고난 후 아래처럼 사용이 가능Foundation 개선NotificationCenter 알림 등록 시 보일러플레이트 제거기존엔 UIResponder 이벤트 등록 시 아래처럼 작성addObserver할 땐 forName: UIResponder.keyboardWillShowNotification으로 작성startFrame, endFrame을 구할때도 긴 코드가 필요변경된 것보일러 플레이트가 많이 줄어들음개선1: addObserver(forName:object:queue:) -> addObserver(of:for:)개선2: userInfo[UIResponder.keyboardFrameBeginUserInfoKey] as?..
자식 뷰가 그려지는 원리일반적으로 뷰가 그려질때 부모 뷰 안에 자식 뷰가 있을때, 자식 뷰는 부모 뷰의 크기에 맞추어서 compression됨HStack이나 VStack안에 뷰를 넣고 이 뷰들의 콘텐츠가 길어질 때 아무리 길어도, 부모 뷰가 compression하려는 성질이 강해서 줄어들거나 말줄임표가 들어감ex) 문자열이 아무리 길어도 부모 뷰 안에 있으면 부모 뷰의 크기에 맞게 compression됨struct ContentView: View { var body: some View { ListExample() }}struct ListExample: View { var body: some View { List { ForEach(0..만약에 부..
padding에 nil 할당의 의미padding을 설정할때는 nil이나 Double값을 할당 할 수 있는데, 차이가 존재padding에 nil을 할당하면 padding()과 같이 시스템에서 알아서 정해주는 default padding으로 세팅됨padding에 0을 할당하면 의미 그대로 여백을 주지 않는다는 의미그렇다면 뷰에 padding을 안썼을때 적용되는 것은?padding에 0을 할당한것과 동일주의) padding에 nil을 할당하면 padding을 안썼을때와 다르게, 시스템에서 알아서 정해주는 세팅이 되므로 주의할 것예시UI에서 토글을 누를때마다 padding 적용 여부를 보고 싶기 때문에 아래와 같은 if함수 정의extension View { @ViewBuilder func `if`( ..
ScrollView안에 Spacer 적용하는 케이스ScrollView안에 Spacer를 잘 활용해야하는 아래와같은 경우가 존재ex) button은 항상 디바이스 하단에 떠 있고, 그 뒤에 스크롤되는 2개의 텍스트가 있는 경우 ("iOS앱 개발 알아가기", "jake") 상단의 Text가 짧을때는, "jake" Text는 하단 SafeArea로 부터 56만큼 간격 유지상단의 Text가 길어져서 스크롤이 많이 가능하게되면 "jake"는 스크롤 영역이므로 스크롤 밑쪽에 위치상단이 짧은 텍스트상단이 긴 텍스트f구현방법은 상단 Text와 하단 Text 사이에 Spacer()를 넣고, 하단 패딩을 주는 방법이 있는데, ScrollView안에 Spacer()를 그대로 사용하면 동작하지 않음ex) ScrollView안..
부모 뷰와 자식 뷰 사이의 애니메이션 처리 원리토글 버튼이 있고 이걸 누를때마다 Text의 문자가fade효과를 내면서 새로 등장하는 애니메이션을 준다고 한 경우 아래처럼 작성이 가능struct ContentView: View { @State var toggle = false var body: some View { VStack { Button("updown Toggle") { toggle.toggle() } Text(toggle ? "is toggled" : "not toggled") .animation(.smooth(duration: 1), val..
