일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- uitableview
- Protocol
- clean architecture
- HIG
- Observable
- uiscrollview
- SWIFT
- map
- 스위프트
- swiftUI
- ribs
- combine
- rxswift
- tableView
- RxCocoa
- swift documentation
- 리펙토링
- Xcode
- 리팩토링
- Clean Code
- Human interface guide
- 클린 코드
- collectionview
- MVVM
- 애니메이션
- Refactoring
- 리펙터링
- ios
- UITextView
- UICollectionView
- Today
- Total
목록SWIFT (948)
김종권의 iOS 앱 개발 알아가기
키보드와 동시에 뷰 올리기"키보드와 텍스트필드 거리가 최소 50은 유지해주세요"키보드가 올라가는 동시에, 키보드 상단과 텍스트 필드 하단의 거리가 최소 50이상 되도록하는 방법?ex) 스크롤 처리를 해주지 않으면 키보드가 올라가고 아무런 처리가 없는 경우 텍스트필드가 영역이 가려짐키보드와 동시에 뷰 올리는 방법autolayout을 사용한다면 keyboard safe area를 사용하거나 scrollView.contentInset.bottom를 동적으로 수정해주어도 되지만 다른 방법이 존재키보드가 올라갈 때, 텍스트필드의 maxY좌표와 키보드의 높이를 계산해서 scrollView.setContentOffset(_:animated:)를 사용해도 자연스럽게 동작구현뷰 준비뷰를 레이아웃 구성하는 부분은 핵심부분..
convert란?상대좌표를 구하고 싶을때 사용하는 것"특정 뷰를 기준으로, y좌표가 얼마나 떨어져 있는가?""aView의 (0, 0) 좌표는 디바이스 전체 화면을 기준으로 좌표값이 무엇일까?"ex) aView.origin의 좌표가 디바이스의 origin으로 부터 얼마나 떨어져 있는가?self.view관점에서 aView.origin은 얼마나 떨어져 있는가를 구할 때는 aView.origin으로만 구할 수가 없음이럴때 convert(_:to:)함수를 사용하여 계산이 가능좌표의 원점이 될 기준이 되는 뷰는 to 파라미터에 넘기기let aView = { let v = UIView(frame: CGRect(x: 100, y: 100, width: 200, height: 200)) v.background..
플러그인 패턴핵심 기능을 변경하지 않고도 새로운 기능을 추가하거나 확장할 수 있도록 하는 구조적 패턴유연성과 확장성이 높다는 장점플러그인 패턴 구조ex) 계산기 로직을 플러그인 패턴으로 만들기PluginManager가 있고 여기서는 핵심 기능을 담당하며, 이곳에 추가하고 싶은 기능(플러그인)들을 등록하고 실행할 수 있는 관리자 역할let pluginManager = PluginManager()플러그인 인스턴스를 만들어서 플러그인에 등록let additionPlugin = AdditionPlugin()let multiplicationPlugin = MultiplicationPlugin()pluginManager.registerPlugin(additionPlugin)pluginManager.registerP..
retroactive 개념단어의 의미"효력이 소급하는"이라는 의미소급하다란 의미는 새롭게 적용된 것이 과거에도 영향을 미친다는 의미ex) 직장인이 25년도 3월에 연봉이 올랐는데, 1월과 2월 월급도 3월에 연봉 오른 값으로 돈을 더 주는 것Swift6.0에서도 @retroactive를 사용하여 코드의 유연성을 가져갈 수 있는데 아래에서 계속 설명@retroactive의 의미이번 프로젝트에서 Foundation에 있는 Date를 사용하다가 id가 필요하여 내가 임의로 Identifiable을 선언한 상태extension Date: Identifiable { public var id: TimeInterval { timeIntervalSince1970 }}1년 후에 갑자기 애플이 Date에 Identi..
changeCount 개념아이폰 사용자가 복사, 클립보드 제거 등의 UIPasteBoard 관련 수정 작업을 하면 애플에서 수정 기록을 기록하는데, 이 기록하는 변수가 changeCount@available(iOS 3.0, *)open class UIPasteboard : NSObject, @unchecked Sendable { open class var general: UIPasteboard { get } open var changeCount: Int { get } // 코드에서는 아래처럼 접근 가능UIPasteBoard.general.changeCount주의할 점)공식 문서에는 0으로 초기화 되는 시점 유저가 기기를 재시작하면 된다고 하는데, 재시작해도 0으로 초기화되지 않음ex) UIPa..
UITableViewCell의 pressed 효과기대하는 pressed 효과 (이 화면은 pressed 효과를 직접 구현한 화면)UIButton의 highlighted 효과처럼 동작 하지만 위처럼 동작하려면 별도 구현이 필요하고, 디폴트는 이렇게 동작됨단, selectionStyle = .none으로 한 상태코드)class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { let tableView = UITableView() override func viewDidLoad() { super.viewDidLoad() tableView.frame = view.bounds..
디스플레이 확대/축소 옵션아이폰에서 Text의 크기도 동적으로 변하지만 Text가 아닌 디스플레이 자체를 확대하고 축소할 수 있는 옵션이 존재위치: 설정 > 디스플레이 및 밝기 > 디스플레이 확대/축소디스플레이 확대/축소 기능디스플레이의 해상도의 비율은 UIScreen.main.scale로 알 수 있지만, 확대/축소했을때의 해상도는 UIScreen.main.nativeScale로 파악이 가능ex) 디스플레이 확대/축소에서 기본으로 둔 경우확대 옵션으로 킨 경우결과)비교)기본확대확대하면 비율이 0.65625%p 증가되었으므로 약 22%가 증가됨때문에 이 확대된 해상도를 고려하여 애니메이션이나 특정한 크기에 관한 대응이 필요한 경우 scale을 nativeScale로 나눈 비율 값을 곱하여 대응이 가능전체..
우선순위 처리 방법보통 OS에서 왼쪽 상단에서 시작하여 오른쪽을 읽고 아래로 순차적으로 읽어줌지구본의 이미지 -> Hello, world! -> toggle buttonex)Hello, world!가 가장 중요할 때, Hello, world!를 가장 먼저 읽히게 하고 싶은 경우?해당 뷰에 accessibilitySortPriority를 높게 설정하기 (값이 높을수록 가장 먼저 읽힘)따로 이 값을 설정 안하면 디폴트 값은 0ex) "Hello, world!" 뷰를 accessibilitySortPriority를 1로 설정struct ContentView: View { @State private var toggle = true var body: some View { VStack..