일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- 리펙토링
- swiftUI
- uitableview
- Xcode
- combine
- SWIFT
- scrollview
- Human interface guide
- clean architecture
- Refactoring
- Observable
- 클린 코드
- swift documentation
- ribs
- tableView
- rxswift
- ios
- map
- uiscrollview
- HIG
- collectionview
- Clean Code
- RxCocoa
- UITextView
- UICollectionView
- 리팩토링
- 애니메이션
- Protocol
- MVVM
- Today
- Total
목록전체 글 (1651)
김종권의 iOS 앱 개발 알아가기

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..

커스텀 뷰cornerRadius가 들어간 버튼을 만들어야할 때, SwiftUI에서는 두 가지 방법이 존재1) RoundedButton 뷰 만들기2) ViewModifier로 정의하고 뷰에 이 modifier 등록하기SwiftUI에서는 ViewModifier를 두어서, 커스텀 뷰 뿐만이 아닌 커스텀 스타일을 사용하는곳에서 간편하게 사용할 수 있도록 설계cornerRadius가 들어간 버튼의 스타일은 여러곳에서 사용할 수 있으므로 ViewModifier로 추상화하기커스텀 뷰를 만드는 것이 아닌, 커스텀 스타일을 만드는 것ViewModifier로 커스텀 스타일 만들기ViewModifier로 만들기 전에 커스텀뷰로 먼저 만들어보면 아래처럼 만들기가 가능하지만 단순히 스타일을 적용하고 여러 버튼에 재사용하려는 목..

SwiftUI의 bacgrkound와 overlaybackground와 overlay 옵션 모두 특정 뷰에 겹치게 뷰를 배치할 때 사용하는 메소드차이점은 background은 뷰 뒤에, overlay는 뷰 앞쪽에 배치 중첩됨ex) background를 사용하면 뷰 뒷쪽에 배치됨struct ContentView: View { var body: some View { VStack { Text("Hello, world!") .background { Color.blue } } .padding() }}ex) overay를 사용하면 뷰 앞쪽에 배치되므로 뷰가 가려..

ScrollViewSwiftUI에서는 ScrollView를 사용할 때, UIKit에서 제공하는 UIScrollView와는 아래 정보 확인이 바로 어려움reachToBottom (스크롤이 바닥에 도달했는지)contentOffset (얼만큼 스크롤을 진행했는지)위 정보를 알 수 있으려면 ScrollView를 감싸서 따로 계산하여 정보 획득이 가능reachToBottom과 contentOffset 구하는 아이디어ScrollView를 감싸서 구현하고, 아래처럼 사용하는쪽에서는 CustomScrollView에 클로저로 콘텐츠 뷰들을 넣을 수 있도록 구현 var body: some View { VStack { CustomScrollView( frameHeight: 300, ..

PreferenceKey일종의 키 이며, 이 키를 이용하여 특정 값을 변경될때마다 관찰할 수가 있음PreferenceKey로 데이터를 뿌리면, 이 데이터에 관심있는 쪽에서 해당 PreferenceKey로 옵저빙이 가능가장 대표적인 사용 방법은 자식뷰 -> 부모뷰로 데이터를 넘길때 사용UIKit에서는 델리게이트나 closure로 넘기지만 SwiftUI에서는 PreferenceKey라는 것이 존재사용방법ex) 자식뷰에서 TextView에 데이터가 입력될때마다 부모 뷰에 전달하고 싶은 경우?자식뷰 준비struct ChildView: View { @State private var inputText = "" var body: some View { VStack { ..

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..

원 안에 테두리가 있는 UI원 안에 테두리가 있는 아래 UI를 구현하는 방법?보통은 Circle()을 선언하고 여기에 oberlay를 사용하여 stroke로 위에 뷰를 덫붙여서 구현struct ContentView: View { let lineWidth = 1.0 let length = 40.0 var body: some View { VStack { Circle() // 첫 번째 circle .stroke(Color(UIColor.clear), lineWidth: lineWidth) .background(Color(UIColor.lightGray)) .frame(widt..

디스플레이 확대/축소 옵션아이폰에서 Text의 크기도 동적으로 변하지만 Text가 아닌 디스플레이 자체를 확대하고 축소할 수 있는 옵션이 존재위치: 설정 > 디스플레이 및 밝기 > 디스플레이 확대/축소디스플레이 확대/축소 기능디스플레이의 해상도의 비율은 UIScreen.main.scale로 알 수 있지만, 확대/축소했을때의 해상도는 UIScreen.main.nativeScale로 파악이 가능ex) 디스플레이 확대/축소에서 기본으로 둔 경우확대 옵션으로 킨 경우결과)비교)기본확대확대하면 비율이 0.65625%p 증가되었으므로 약 22%가 증가됨때문에 이 확대된 해상도를 고려하여 애니메이션이나 특정한 크기에 관한 대응이 필요한 경우 scale을 nativeScale로 나눈 비율 값을 곱하여 대응이 가능전체..