일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UITextView
- Refactoring
- map
- Xcode
- ribs
- SWIFT
- UICollectionView
- MVVM
- 스위프트
- tableView
- rxswift
- RxCocoa
- collectionview
- swift documentation
- 리펙토링
- Protocol
- swiftUI
- Clean Code
- clean architecture
- 리팩토링
- HIG
- 리펙터링
- uitableview
- uiscrollview
- ios
- Human interface guide
- combine
- Observable
- 클린 코드
- 애니메이션
- Today
- Total
목록분류 전체보기 (1640)
김종권의 iOS 앱 개발 알아가기
iOS 17 textViewDidChangeSelection 버그 iOS17 이전까지는 델리게이트에서 selection range가 변경되면 textView.selectedRange값이 실시간으로 변경해주었지만, iOS17 부터는 사용자가 드래그를 놓았을때만 호출됨 심지어 textView.selectedRange값을 계속 print해보아도 cursor를 놓았을때만 변경되는 버그가 존재 extension ViewController: UITextViewDelegate { func textViewDidChangeSelection(_ textView: UITextView) { print("range>", textView.selectedRange) } } 실시간으로 cursor 위치 파악하는 방법 selectio..
didMoveToWindow() 메서드 UIView 클래스의 라이프사이클 메서드 해당 뷰를 가지고 있던 window 객체가 변경되었다는 의미 해당 뷰가 윈도우에 추가되거나 윈도우에서 제거될 때 호출 present나 push를 통해서 UIViewController안에 UIView를 노출시키는데, 이 때 UIView 내부의 didMoveToWIndow() 메서드가 호출 didMoveToWindow() 활용 이 메서드를 override하여 print해보면 이 뷰를 가지고 있는 VC가 present될때 한번 호출되고 dismiss될때 한번 호출 class SomeView: UIView { init() { super.init(frame: .zero) backgroundColor = .gray.withAlphaCo..
1. touch indicator 구현 방법 - 기초 개념 sendEvent(_:), UIEvent (allTouches, UITouch, phase) 2. touch indicator 구현 방법 - DebugTouchesWindow, Touch Indicator 구현 아이디어 window의 sendEvent에서 touch view를 삽입 sendEvent 메서드 인자로 들어오는 event의 phase를 보면 began, ended를 알 수 있기 때문에 began에서 뷰를 넣어주고, ended에서 뷰를 삭제 커스텀 Window 구현 UIWindow 상속하여 커스텀 윈도우 구현 open class TouchesWindow: UIWindow { } 필요한 property와 sendEvent 선언 public..
1. touch indicator 구현 방법 - 기초 개념 sendEvent(_:), UIEvent (allTouches, UITouch, phase) 2. touch indicator 구현 방법 - DebugTouchesWindow, Touch Indicator 이벤트 처리 방식 터치 이벤트가 발생하면 UIApplicationDelegate부터 시작하여 터치된 뷰를 탐색 주의) 애플에서 보여주는 이미지는 아래처럼 되어있어서 얼핏 터치 이벤트 전달 과정이 가장 위에 깔린 뷰부터라고 오해할 수 있지만 잘못된 개념 실제로는 UIWindow가 먼저 받아서 이 위에 깔린 뷰에게 전달하고 위에 깔린 뷰에 responder 탐색하는것 ex) 아래에서 알아볼 UIWindow의 sendEvent가 가장 먼저 호출되고 ..
조건문 리펙터링 Xcode15 이상, Swift5.9부터 조건문들을 모두 하나의 표현식으로 간주할 수 있으므로 더욱 간결하게 표현이 가능 if, else 리펙터링 swift5.9 미만 버전에서는 if, else 분기문에 따라 값이 달라질 때 바로 위에 UIColor라는 타입만 명시하는 프로퍼티를 선언 let count = Int.random(in: 0...100) let color: UIColor if count % 2 == 0 { color = .blue } else { color = .red } 또는 closure를 사용하여 반환 let newColor = { if count % 2 == 0 { return UIColor.blue } else { return .red } }() 조건문을 사용할 때 c..
1. 이미지 처리 - heic, heif 개념 2. 이미지 처리 - 회전 각도 메타 정보, 이미지 메타 다이터, imageOrientation (exif) 3. 이미지 처리 - 이미지 회전 메타 정보 제거 방법 (UIGraphics, CurrentImageContext) 안전한 이미지 처리 방법 (저번시간에 알아본 내용) * 아래 내용에 대한 구체적인 내용은 이전 포스팅 글 참고 EXIF 정보나 imageOrientation 정보가 다르고, 이미지를 이미지 서버에 업로드할 때 애초에 imageOrientation 정보를 제거하면 서로 혼돈이 없는 상태로 관리가 가능 아이폰 앨범에서 이미지 회전 메타 정보가 이미 적용된 결과를 보여주기 때문에, swift에서 사용할 때 메타 정보를 제거하고난 후 이미지 서..
1. 이미지 처리 - heic, heif 개념 2. 이미지 처리 - 회전 각도 메타 정보, 이미지 메타 다이터, imageOrientation (exif) 3. 이미지 처리 - 이미지 회전 메타 정보 제거 방법, 이미지 회전처리 이미지 회전 메타 정보 이미지 정보에는 항상 메타 정보와 함께 기록되는데, 아이폰에서 사진을 찍어도 메타 정보가 존재 아이폰에서 가로로 사진을 찍으면 회전 각도가 0이고, 세로로 사진을 찍으면 회전 각도가 반시계 방향 90도로 나타남 회전 각도 정보 확인 방법 아이폰에서 세로로 사진을 찍고 맥북에서 확인 미리보기 > 도구 > 속성 보기 클릭 일반 정보 창이 뜨는데 여기서 느낌표 아이콘 클릭 방향 정보가 존재 (해당 이미지) Swift에서 회전된 메타 정보 확인하기 - imageO..
1. 이미지 처리 - heic, heif 개념 2. 이미지 처리 - 회전 각도 메타 정보, 이미지 메타 다이터, imageOrientation (exif) 3. 이미지 처리 - 이미지 회전 메타 정보 제거 방법 (UIGraphics, CurrentImageContext) heic, heif 개념 HEIF (High Efficiency Image Format)는 MPEG에서 개발된 이미지 포멧 '히프' 또는 '헤익'이라고 발음 이미지 하나의 프레임이 아닌, 이미지 컨테이너를 의미 (H.265/HEVC 코덱) 아이폰에서 동영상을 찍으면 H264 또는 HEVC 포멧으로 저장되는데 이 때 HEVC안에 스틸 이미지 하나가 HEIF 형태 iOS 11과 macOS High Sierra에서 처음으로 사진, 동영상 저장..