| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- ios
- HIG
- Refactoring
- uitableview
- 리팩토링
- collectionview
- Protocol
- MVVM
- tableView
- clean architecture
- SWIFT
- swiftUI
- 리펙토링
- map
- 애니메이션
- UICollectionView
- Human interface guide
- 스위프트
- combine
- scrollview
- ribs
- 클린 코드
- UITextView
- uiscrollview
- Xcode
- Observable
- swift documentation
- rxswift
- RxCocoa
- Clean Code
- Today
- Total
목록swiftUI (185)
김종권의 iOS 앱 개발 알아가기
변경된 앱 아이콘 컨셉예전에는 맥북, 아이폰, 애플워치 마다 같은 성격의 설정 앱이라도 이미지가 미세하게 달랐었음하지만 이제는 매우 심플하게 처리맥북, 아이폰: 네모난 배경애플워치: 동그란 배경이렇게 처리하게된 배경에는 `foreground layer`, `background layer`, `.icon`과 관련된 개념이 생겨나서 부터 확립Icon Composer (layer와 .icon)애플에서는 앱 아이콘을 정의할때 layer(*층)라는 것을 두어서 이것을 사용하여 앱 아이콘을 표현함층을 두어서 입체적으로 표현하려는것이 목적층(layer)들을 합쳐놓은(Composer)것을 Icon Composer라고 지칭이 개념에 의해, 이제 여러가지의 앱 아이콘 제작이 없이, 단순히 각 layer를 표현하는 이미지만..
cf) LazyVStack해서 구현 방법 포스팅 글은 이 링크의 포스팅 글 참고: https://ios-development.tistory.com/1760 StickyHeader 구현 아이디어StickyHeader를 순수 직접 구현하려면 많은 작업이 들겠지만, SwiftUI에서 List안에 Section(header:)를 이용하면, 스크롤 시 자동으로 위에 걸쳐지는 효과를 사용하면 구현하기가 매우 쉬움단, List의 속성에 .listStyle(.plain)을 해줘야 section으로 넣었던 UI들이 sticky header로 동작함구현List 선언struct ListStickyHeaderView: View { var body: some View { NavigationView { ..
SwiftUI Instruments 에 중요한 것SwiftUI Instruments를 보면 빨간선과 주황선이 보이는데, 이 정보들은 중요한 것임(아래 사진 관련 내용: https://ios-development.tistory.com/1815)빨간색 선 기준기준: View의 body 계산 시간이 1.0ms를 초과할 때 표시의미: 매우 심각한 성능 저하 상태영향: 120Hz 디스플레이(ProMotion) 환경에서 프레임당 가용 시간은 약 8.3ms인데, 뷰 하나 그리는 데 1ms를 넘겨버리면 실제 렌더링 루틴 전체가 꼬이며 눈에 띄는 Hitch(버벅임)가 발생주황색 선 기준기준: View의 body 계산 시간이 0.5ms를 초과할 때 표시의미: 성능 저하 주의 단계영향: 당장 화면이 멈추지는 않더라도, 이런..
탭했을 때 키보드 내리기다른 제스처도 동시에 동작하게끔 하기 위해 보통 아래처럼 simultaneousGesture를 사용하여 tapGesture 이벤트를 얻어서 isFocused = false로 처리struct ContentView: View { @State private var text: String = "" @FocusState private var isFocused: Bool var body: some View { ScrollView { VStack(spacing: 16) { TextField("텍스트를 입력하세요", text: $text) .textFieldStyle(.roundedBor..
행이란?사용자가 앱을 쓸 때 지연된다고 느껴지는 것예) 사용자가 버튼을 누른 경우, 조금 있다가 반응한다는 느낌을 주는 것애플에서 제공하는 가이드)의미Instant즉각적인반응이 바로 느껴질 정도로 빠름 (~100ms 이내)Circumstantial상황에 따라 달라지는, 약간 느리지만 용인됨약간의 지연(~250ms)은 사용자가 느끼지만 불편하지 않음Microhang미세한 멈춤눈에 띄는 짧은 멈춤 (~500ms 미만)Hang완전한 멈춤(먹통)반응이 끊기거나 멈춘 듯한 상태 (~500ms 이상)즉, 즉각적이려면 100ms 이내로 동작하게끔해야함또 행의 기준은 500ms 이상 걸리는 동작을 의미함행 파악하는 방법위에서 알아본대로 500ms 이상 걸리는 작업을 행이라고 정의이 행은 Instruments의 Time..
frame(maxWidth: .infinity)의 의미"부모가 줄 수 있는 만큼 가로폭을 가득 채워라" 란 의미frame(maxWidth: .infinity)는 최대 크기를 제한 한다는 느낌을 주는데 이 의미가 아님다른 예제)아래처럼 텍스트가 좌우 24 패딩을 갖는 뷰 구현?여기도 frame(maxWidth: .infinity)를 추가하여 구현struct Example1: View { var body: some View { VStack { Text("Hello") .frame(maxWidth: .infinity) // Rounded 처리 방법보통 외부 마진을 주고 버튼이 수평으로 쫙 펼친 아래와 같은 것을 요건이 있는 경우?구현하다보면 아..
인터페이스 제공 방법만약 링크 터치 이벤트를 처리하는 LinkDetectionText를 만들고 싶은 경우, LinkDetectionText 내부에서 해당 프로퍼티를 사용\.openURL의 정체: SwiftUI가 미리 정의한 EnvironmentKey@Environment(\.openURL) private var openURL아래처럼 openURL 프로퍼티를 선언한 후 이 프로퍼티를 마치 클로저처럼 실행시키면, 외부에서 사용이 가능struct LinkDetectingText: View { @Environment(\.openURL) private var openURL // AttributedString { ... }}외부에서는 openURL 키를 가지고 envionment 함수의 클..
View 업데이트 빈도수 파악하기View의 body부분에서 업데이트가 너무 많게되면 아래 사진처럼 데드라인을 넘게되는 경우가 존재-> hitch가 발생업데이트 수 프로파일링 방법View Body Updates 하위 트랙 선택빨간선 or 주황선 부분을 드래그하여 영역 선택 LandmarkListItemView에 Update Count가 30으로 찍혀있음View코드를 작성할 때 이 부분을 확인해보면 내가 의도된 업데이트 카운트로 구현했는지 알 수 있음만약, List와 Row가 있는 뷰를 구현할 때 Row에 state하나만 바꿨을때, List전체가 업데이트 되었는지 파악하는 용도로도 사용이 가능* 참고- https://developer.apple.com/videos/play/wwdc2025/306/