일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- clean architecture
- HIG
- Observable
- swiftUI
- swift documentation
- Human interface guide
- 스위프트
- combine
- rxswift
- RxCocoa
- Clean Code
- uitableview
- MVVM
- Protocol
- UICollectionView
- 애니메이션
- SWIFT
- tableView
- Xcode
- ribs
- 리팩토링
- uiscrollview
- 리펙토링
- map
- ios
- Refactoring
- collectionview
- 리펙터링
- Today
- Total
목록2022/05 (31)
김종권의 iOS 앱 개발 알아가기
Pulse 애니메이션 구현 아이디어 CABasicAnimation와 CAKeyframeAnimation 사용 크기를 키우는 애니메이션은 단순히 시간에 따라 일정한 방향으로 키우면 되므로 CABasicAnimation사용(keyPath: transform.scale.xy) 투명도가 밝아졌다가 다시 투명해져야 하므로, 값이 프레임에 따라 다르게 적용되어야하는 CAKeyframeAnimation사용 (keyPath: opacity) 위 애니메이션이 동시에 적용되어야 하므로, CAAnimationGroup을 사용 애니메이션 구현 클래스 준비 import UIKit class ViewController: UIViewController { } 뷰 준비 private let sampleView: UIView = { ..
* 이 글보다 더 깔끔하게 UI를 구현하고, 온라인 상태를 암시해주는 썸네일을 구현한 포스팅 글은 이 링크 참고 구현 아이디어 원에 강아지 넣기 UIView안에 UIImageView를 넣고, UIImageView의 autolayout을 통해 superview와 일정 간격 떨어뜨려서 흰색 여백을 생성 테두리 그라데이션 UIImageView의 superview인 containerView.layer에 CAGradientLayer()를 넣어서 그라데이션 입력 그라데이션 색상은 CAGradientLayer()에서 설정하고, 테두리 윤곽선을 따라서 그려지는 레이아웃은 CAShapeLayer()를 통해 레이아웃을 구해서 사용 원에 강아지 넣기 VC 준비 import UIKit class ViewController: ..
1. ContainerView 활용 방법 - UINavigationView와 View hierarchy 2. ContainerView 활용 방법 - UIView를 present, dismiss 트랜지션 애니메이션 구현 방법 * 1번에서 구현한 뷰 계층 관계: VC1 VC1.view와 동일하도록 (꽉 차도록 설정) VC2.view에 containerView를 하나 만들어서 이 뷰를 show()메소드가 불릴때 위로 올라오도록 구현 present처럼 보여질 VC2 구현 필요한 UI 준비 present처럼 보여져야 하므로 containerView 제목을 표시할 titleLabel 버튼 클릭 시 push가 되어야 하므로 button import UIKit import SnapKit class VC2: UIView..
1. ContainerView 활용 방법 - UINavigationView와 View hierarchy 2. ContainerView 활용 방법 - UIView를 present, dismiss 트랜지션 애니메이션 구현 방법 ViewController지만, 이전 화면을 덮지 않는 view hierarchy를 사용하고 싶은 경우 해결 VC1위에 UINavigationController가 있고 이 위에 VC1 버튼이 있는 형태 보통 VC1위에 present 시켜서 새로운 VC를 띄우지만 위와같이 VC1위에 가장 상위에 있는 버튼이 존재하고, 그 바로 아래에서 새로운 UINavigationController가 존재하는 형태 구현 아이디어 VC1위에 UINavigationController의 view와 VC1위에..
구현 아이디어 UIGestureRecognizer를 사용하여 제스쳐 이벤트를 감지 제스쳐 이벤트가 발생하면, 애니메이션 실행 애니메이션은 UIViewPropertyAnimator를 사용하여 구현 애니메이션은 다음 뷰가 점점 보여지도록 설정 UIViewPropertyAnimator를 사용하면 현재 진행되고 있는 진행률에 따라 애니메이션을 진행시킬 수 있고, 다시 reversed 시키는 기능이 편하므로 사용 드래그하면 뷰가 따라서 이동되게끔 하는 구현 아이디어 animator 정의 (transform 사용하여 뷰가 왼쪽으로 이동되는 애니메이션) gesture의 began상태 - animator를 생성 gesture의 changed 상태 - 현재까지 swipe된 x좌표와, width를 구하고 비율을 구하여 U..
1. UIViewPropertyAnimator, AnimationStates - 개념 2. UIViewPropertyAnimator, AnimationStates - fractionComplete, interactive animation (상호작용 애니메이션) UIViewPropertyAnimator의 상태 (복습) 새로 생성된 인스턴스는 inactive상태에서 시작 애니메이션을 마친 인스턴스도 inactive 상태로 돌아감 startAnimation() 메서드를 호출하면 active 상태로 변경 중지하면 stopped 상태로 변경 interactive animation (상호작용 애니메이션) ex) viewDidAppear 메소드에서 애니메이션이 시작되고, 이 애니메이션은 3개의 뷰를 순차적으로 흐리게..
* Enum에 Equatable 프로토콜을 준수하여 만드는 방법) https://ios-development.tistory.com/348 Enum에 ~= 연산자 사용하여 init 만들기 일반적인 경우, enum은 String을 준수하여 rawValue로 초기화가 가능 enum NamePrefix: String { case kim case lee case park } (rawValue로 초기화) let namePrefix = NamePrefix(rawValue: "kim") print(namePrefix) // Optional(ExEnum.NamePrefix.kim) ~= 연산자를 사용하면, 손쉽게 equatable 속성으로 만들기가 용이 static으로 ~= 연산자를 정의 failable init으로 초..
1. Local Notification (로컬 푸시, 로컬 노티) - 사용 방법 2. Local Notification (로컬 푸시, 로컬 노티) - badge (뱃지) 숫자 처리, 딥링크 처리 * 1번 까지 진행한 노티 코드: https://github.com/JK0369/ExLocalPush1 Badge 숫자 처리 로컬 푸시의 뱃지는 수동으로 처리 // iOS 13 이하나 SceneDelegate가 없는 경우 func applicationDidBecomeActive(_ application: UIApplication) { UIApplication.shared.applicationIconBadgeNumber = 0 } // iOS 13 이상, SceneDelegate가 존재할 때 func sceneWi..