일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UICollectionView
- swiftUI
- 리펙터링
- collectionview
- Human interface guide
- uiscrollview
- rxswift
- SWIFT
- RxCocoa
- UITextView
- uitableview
- map
- 리팩토링
- Xcode
- tableView
- 스위프트
- 클린 코드
- MVVM
- HIG
- 리펙토링
- clean architecture
- swift documentation
- Clean Code
- ios
- Refactoring
- Protocol
- ribs
- 애니메이션
- combine
- Observable
- Today
- Total
목록분류 전체보기 (1635)
김종권의 iOS 앱 개발 알아가기
UITableViewCell과 UICollectionViewCellUITableViewCell과 UICollectionViewCell은 각각 반복되는 여러 데이터를 화면에 보이는 지점만 렌더링하여(cellForRowAt, cellForItemAt) 효율적으로 뷰를 그릴 수 있는 인터페이스UITableViewCellUICollectionViewCell각 커스텀 셀을 구현할 때 비슷한 구조를 가지고 있음ex) tableViewCell 구현class CustomTableViewCell: UITableViewCell { let titleLabel = UILabel() override init(style: UITableViewCell.CellStyle, reuseIdentifier: String..
iOS 17+에서 UIActivityViewController 접근성 버그버튼을 눌러서 UIActivityViewController를 띄우는 화면에서 접근성이 버튼에서 자동으로 UIActivityViewController으로 이동되지 않는 현상기본지식) fullScreen 모달 스타일로 UIViewController가 화면에 보여지게되면 접근성도 UIViewController로 자동으로 포커스가 이동되어야 하는데 iOS 17+ 에서 UIActivityViewController를 present로 띄우면 포커스가 자동으로 이동 안되는 경우가 존재코드)import UIKitclass ViewController: UIViewController { override func viewDidLoad() { ..
코드 실행아래와 같이 viewDidAppear에서 a()함수가 실행되면 출력되는 값은?"a" -> "b" -> "c" -> "deinit" 일까?class VC: UIViewController { deinit { print("deinit") } override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .systemBlue } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) a() } func a() { prin..
1. 클로저를 사용할 때 주의할 점 - Memory Leaks, Retain Cycle, nested closure 첫 번째2. 클로저를 사용할 때 주의할 점 - nested closure 두 번째3. 클로저를 사용할 때 주의할 점 - nested closure 세 번째nested closure에서 weak로 잡지 않는 경우closure가 두 번 생길 때 아래와 같은 경우가 존재ss.instance?.f1 클로저 안에 ss.instance?.f2가 있고, 모두 RxSwift에서 제공하는 연산자 subscribe(with: self)로 접근함으로써 self는 weak로 잡은 상태weak var instance: SomeClass?button.rx.tap .subscribe(with: self) { s..
네트워크 속도 제한 거는 방법 - Network Link ContionerNetwork Link Contioner를 사용하면 네트워크 대역폭, 딜리이 등 설정이 가능사용 방법iOS 17.4.1 기준으로, 맥북에 한번 이상 연결된 아이폰 준비 > 아이폰 설정 앱 > 개발자 > 네트워크 링크 컨디셔너주의1) 맥북에 한번이라도 연결시켜야 개발자 메뉴가 노출됨주의2) 아이폰 OS에 따라서 개발자 메뉴가 설정키면 바로 보이는것도 있고, 설정 > 개인정보 보호 및 보안 메뉴 안에 개발자 메뉴가 있는 경우도 있음설정 > 개발자)개발자 > 네트워크 링크 컨디셔너네트워크 링크 컨디셔너 화면)네트워크 링크 컨디셔너 사용 방법화면을 보면 프리셋으로 100% Loss부터 Wi-Fi 802.11ac까지 9개의 종류가 존재10..
CGImage와 UIImage 개념UIImage와 CGImage 모두 이미지에 관한 데이터를 갖고 있는 인터페이스UIImage 데이터가 있으면 CGImage 인스턴스로 변환도 가능private let image = UIImage(named: "tree")!let cgImage = image.cgImageUIImage는 cgImage를 wrapping한 형태이며, UI를 그릴때 더욱 고수준 레벨로 인터페이스를 제공하여 UI 작업에 집중할 수 있게 해놓은 것cgImage는 UI를 그리는 인터페이스 외에도 bits와 같은 저수준 레벨의 세부 데이터 접근을 위해서 있는 것가장 대표적인 예) size 값UIImage의 size 프로퍼티를 사용하면 디바이스의 scale 값을 고려하지 않은 값을 얻어옴x2 스케일을 ..
배경지식 1) UIImage의 size 의미UIImage에서 size값이 프로퍼티로 있는데, 이 size값은 디바이스의 스케일 (UIScreen.main.scale)값을 구분하지 않은 값임을 주의private let image = UIImage(named: "tree")!let size = image.size실제 사이즈는 다음과 같이 scale값을 곱해준 것let scale = UIScreen.main.scaleprint(image.size.width * scale, image.size.height * scale)svg 이미지 포멧인 경우에서 이미지 사이즈는?보통 Assets 폴더에 이미지를 넣는데, png로 넣으면 x1, x2, x3 다 넣을 수 있지만 svg형태로 벡터로 넣으면 scale하나로 지정s..
콘페티 효과콘페티 효과를 구현하려면 CAEmitterCell과 CAEmitterLayer를 사용하여 구현폭죽 효과눈 효과 CAEmitterCell, CAEmitterLayer 개념CAEmitterCell을 CAEmitterLayer에 추가하고, layer에서 위치를 정한다음 view.layer.addSublayer에 추가하여 구현CAEmitterCell로 파티클에 들어갈 하나하나의 요소의 속성값을 정하고, CAEmitterLayer에 이 emitterCell을 주입해주는 것let emitterCell = (CAEmitterCell 인스턴스)let emitterLayer = CAEmitterLayer()emitterLayer.emitterPosition = CGPoint(x: view.bounds.midX..