일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- uiscrollview
- HIG
- swiftUI
- Clean Code
- 리펙토링
- ios
- Observable
- ribs
- 클린 코드
- swift documentation
- 스위프트
- map
- 리펙터링
- UITextView
- SWIFT
- 애니메이션
- UICollectionView
- Protocol
- clean architecture
- MVVM
- Refactoring
- uitableview
- Xcode
- Human interface guide
- RxCocoa
- rxswift
- combine
- collectionview
- 리팩토링
- tableView
- Today
- Total
목록2022/10 (31)
김종권의 iOS 앱 개발 알아가기
목차) SwiftUI의 기본 - 목차 링크 Shape 2D 모양의 뷰를 의미하는 프로토콜 (Circle, Capsule, Ellipse, ... 등) Shape 프로토콜 형태 path(in:)->Path: shape의 형태를 Path로 리턴 role: 모양을 채우는 스타일을 정의하며, 결합 모양(composite shape)과 같은 것을 만들때 이 프로퍼티를 재정의하여 사용 default implementation이 존재 - ShapeRole.fill이 있고 stroke와 separator가 있는 타입 @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) public protocol Shape : Animatable, View { func path(..
1. Prevent Capture, Recording - 캡쳐 막는 방법, 화면 녹화 방지 (isSecureTextEntry) 2. Prevent Capture, Recording - 캡쳐 감지 방법, 녹화 감지 방법 캡쳐와 녹화 감지 방법 * 예제 편의상 SceneDelegate 제거하고 AppDelegate만 사용 SceneDelegate 삭제 방법 포스팅 글 참고 감지는 NotificationCenter.default.addObserver()로 가능 캡쳐 감지 - UIApplication.userDidTakeScreenshotNotification 녹화 감지 - UIScreen.capturedDidChangeNotification AppDelegate에 해당 코드 사용하여 캡쳐 감지되었을때 aler..
1. Prevent Capture, Recording - 캡쳐 막는 방법, 화면 녹화 방지 (isSecureTextEntry) 2. Prevent Capture, Recording - 캡쳐 감지 방법, 녹화 감지 방법 Capture를 막는 아이디어 안드로이드처럼 사용자가 캡쳐를 했을때 캡쳐를 못하게 하는 방법은 불가능 사용자가 캡쳐했을때, 특정 뷰의 내용이 가려지도록 하는 방법은 가능 UITextField에는 isSecureTextEntry라는 속성이 있는데, 이게 켜져있으면 캡쳐했을때 캡쳐의 내용이 안보이도록 할 수 있는 기능이 존재 캡쳐를 막을 뷰에다가 isSecureTextEntry를 true로 한 UITextField를 삽입하면 캡쳐를 했을때, UITextField를 가지고 있는 layer의 캡쳐..
목차) SwiftUI의 기본 - 목차 링크 Transition 뷰를 보여질때와 제거할때의 애니메이션 주의: Transition 의미는 뷰를 이동할때의 개념보다는, 뷰를 보여지게할때와 사라지게할때의 애니메이션 개념으로 이해 뷰에 .transition(_:)으로 선언하여 사용이 가능 .transition(_:)에 들어가는 인수는 AnyTransition AnyTransition 위에서 알아봤듯이 .transition(_:) 인수에 들어가는 값 /// A type-erased transition. @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) @frozen public struct AnyTransition { } AnyTransition은 exte..
목차) SwiftUI의 기본 - 목차 링크 Animatable 프로토콜이며 animatableData 프로퍼티를 가지고 있는 프로토콜 특정 값을 뷰에 주입하면, animatable 프로토콜을 통해 미리 정해둔 값을 이용하여 내부적으로 계산하여 미리 애니메이션에 사용할 데이터를 정의해둔다는 의미 /// A type that describes how to animate a property of a view. @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) public protocol Animatable { /// The type defining the data to animate. associatedtype AnimatableData : Vecto..
목차) SwiftUI의 기본 - 목차 링크 Animation SwiftUI에서는 withAnimation을 통하여 쉽게 애니메이션 효과 적용이 가능 버튼을 눌렀을때 widthAnimation()에 애니메이션 타입, duration, 애니메이션 적용할 클로저 블록만 구현하면 완료 애니메이션 적용 방법 애니메이션을 적용하기 전에 필요한 뷰 준비 모두 동일한 width로 시작 GeometryReader를 통해 현재 영역의 width, height값을 사용 struct ContentView : View { private let duration = 3.0 @State var isAnimated = false @State var width1 = 150.0 @State var width2 = 150.0 @State ..
Enum 생성자 사용 enum도 class와 struct와 같이 초기화하여 사용할 수 있도록 하는 방법이 존재 ex) 과일 이름 문자열 값을 enum타입의 생성자로 넣으면, 과일 타입으로 나오게끔 하는 방법 let fruit = "apple" let type = Fruit(fruit) print(type) // Optional(Fruit.apple) enum 생성자 사용 방법 enum 준비 enum Fruit { case apple case banana case orange } switch문을 통하여 case타입을 초기화 하는 방식이기에, 내부적으로 초기화할때 사용할 각 타입에 따른 이름 값 정의 private var nameValue: String { switch self { case .apple: r..
UserInfo란? 푸시 데이터가 담겨있는 json 형태를 [AnyHashable: Any]형태로 있는 자료형 {"aps":{"alert":"test","badge":"1"}} ex) 시스템 푸시를 클릭했을때 동작하는 델리게이트 메소드에서 userInfo 획득 func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { let userInfo = response.notification.request.content.userInfo print(userInfo..