일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Observable
- tableView
- RxCocoa
- Clean Code
- Refactoring
- 애니메이션
- 클린 코드
- ribs
- ios
- swift documentation
- map
- MVVM
- UITextView
- uiscrollview
- Human interface guide
- 리펙토링
- HIG
- rxswift
- Xcode
- UICollectionView
- uitableview
- combine
- 리팩토링
- clean architecture
- SWIFT
- 리펙터링
- Protocol
- 스위프트
- collectionview
- swiftUI
- Today
- Total
목록2022/06 (30)
김종권의 iOS 앱 개발 알아가기
구현 아이디어 UIView 2개를 준비 안쪽 뷰 하나 바깥 쪽 waveView 하나 바깥 쪽 waveView의 CGSize를 크게했다가, 줄였다가를 재귀적으로 계속 요청하여 반복되도록 설정 구현 원 형태로 그려지게 할것이므로, RoundView 준비 import UIKit class RoundView: UIView { override func layoutSubviews() { super.layoutSubviews() self.clipsToBounds = true self.layer.cornerRadius = self.bounds.height / 2.0 } } Wave Animation을 적용할 ViewController 준비 import UIKit class ViewController: UIViewCon..
구현 아이디어 - 뷰의 구조 레이아웃을 쉽게하기 위해서 뷰 2개를 사용 맨 아래에 깔린 뷰 - 터치 이벤트가 아래 뷰에 전달되는 PassThroughView를 사용 그 위에 UIView를 얹는 형태 (= bottomSheetView) BottomSheetView의 constraint left.right.bottom은 superview와 같도록 정의 top은 미리 정의해둔 yPosition만큼 top의 간격만큼 처리 // tip(아래쪽에 붙어있는 모드)과 full로 정하고, 각 yPosition을 계산 enum Mode { case tip case full } private enum Const { static let bottomSheetRatio: (Mode) -> Double = { mode in swi..
사용한 프레임워크 UI 레이아웃 구현에 편의를 위해 사용 SnapKit Then 구현 아이디어 동그란 뷰가 여기저기서 많이 사용되고 있으므로, RoundView, RoundImageView를 새로 만들어서 사용 동그란 뷰를 서브클래싱하여 구현 핵심은 온라인 상태를 암시해주는 초록색 뷰의 위치 가장 아래에 있는 UIView에 이미지가 들어갈 containerView와 온라인 상태를 암시하는 greenDotContainerView를 삽입 containerView에는 이미지가 들어가는 형태로 구현 바깥 테두리의 그라데이션 효과는, layoutSubviews()에서 CAShapeLayer를 통해 테두리의 radius, width값을 구해서 사용 구현 동그란 뷰 RoundView, RoundImageView //..
1. 스크롤 영역을 암시해주는 Carousel 구현 - (UICollectionView, 수평 스크롤 뷰, paging 구현) 2. 스크롤 영역을 암시해주는 Carousel 구현 - 포커스 영역 이펙트 첫번째 글에서 구현한 Carousel) 이번 글에서 알아볼, 셀에 효과가 들어간 Carousel) * 포커스 되는 영역이 아닐 경우, dimmed 처리 * 구현 전에 이전까지 구현된 코드 다운로드: https://github.com/JK0369/ExCarousel 모델 생성 iOS에서 셀은 항상 reuse 되므로, cell에 직접 접근하여 속성을 변경하는 것보다 dataSource에 속성을 지정해준 다음 reloadData하도록 설계할것 상태 관리를 dataSource에서만 하도록 구현 기존에 아래처럼 있..
1. 스크롤 영역을 암시해주는 Carousel 구현 - (UICollectionView, 수평 스크롤 뷰, paging 구현) 2. 스크롤 영역을 암시해주는 Carousel 구현 - 포커스 영역 이펙트 구현 아이디어 수평 스크롤 뷰 구현 방법은 FlowLayout+UICollectionView으로 구현하는 방법인 이전 포스팅 글 참고 양옆에 item이 보여서, 스크롤 할 수 있다는 암시를 주도록 paging이 되어야 하므로 이 것을 구현하는 것이 핵심 paging을 직접 구현 `isPagingEnabled = false` 스크롤이 페이징처럼 보여지기 `decelearationRate = .fast` 페이징을 scrollViewWillEndDragging에서 구현 (UICollectionViewDelega..
지역화 적용 Strings 파일 추가 Strings 파일 > 아래 이름으로 추가 InfoPlist.strings 아래처럼 기존에 지역화를 이미 활성화 했다면, 다시 InfoPlist.strings 파일 클릭 만약 지역화 활성화가 안되어있다면 + 버튼을 클릭하여 지역화 사용 오른쪽 네비게이터에서 Localize 클릭 English 선택 Localization이 생성된것을 확인 Korea도 체크 InfoPlist.strings 하위에 2개의 파일이 생긴것을 확인 key - value쌍과 세미콜론으로 앱 이름 지역화 사용 (Korea) "CFBundleDisplayName" = "카운트 기록"; "CFBundleName" = "카운트 기록"; (English) "CFBundleDisplayName" = "Ta..
고차함수 (Higher order function) 인수로 함수를 받는다 or 함수를 결과로 반환한다 func myFunc(argFunc: Void -> ()) -> someFunc { } 고차함수를 사용하면 유연하고 반복을 줄일 수 있는 장점이 존재하여, Collection 관련 연산을 할때 되도록 고차함수 사용을 지향 swift의 대표적인 고차함수 인수로 함수를 받는 형태 대표적인 4가지 sorted func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element] filter func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Elem..
사용한 프레임워크 RxSwift RxCocoa RxDataSources 구현 아이디어 RxDataSources의 인스턴스가 가지고 있는 canEditRowAtIndexPath라는 프로퍼티를 사용하여 delete 기능 활성화 dataSource.canEditRowAtIndexPath = { _, _ in true } tableView의 rx.itemDeleted를 바인딩하여 처리 self.tableView.rx.itemDeleted .bind { ... } RxDataSource를 사용한 UITableView 구현 예제에 사용할 SectionModel Section의 데이터는 사용하지 않을 것이지만, section이 존재할때 어떻게 사용되는지를 예를 위해 존재 import RxDataSources stru..