스토리보드로 개발을 하면 IBOutlet을 연결해서 원하는 객체의 속성을 제어합니다. 이전에 로딩 뷰를 커스텀하게 만들어 사용했었는데 그때 IBOutlet Collection을 사용해 편리하게 객체의 속성을 제어했어서 IBOutlet Collection 사용법을 블로그에 공유하려 합니다. 먼저 제가 만든 커스텀한 로딩뷰는 이렇습니다. 3개의 UIView로 구성되어있으며 그 뷰는 차례로 커졌다 작아졌다를 반복합니다. 만약 IBOutlet을 사용하지 않았다면 아래와 같이 모든 점들에 대해 IBOutlet을 연결하고 속성을 제어해야 할 겁니다. 만약 코너를 둥글게 만들고 싶다고 치면 3개의 점들에 대해 접근한 후 radius값을 설정해줘야 합니다. 이는 코드가 길어지며 반복된 행위에 대해서 다 나열해서 코드를..
보통 앱에서 글을 입력하고 키보드에 있는 완료를 누르거나 빈 화면을 터치해서 키보드를 내립니다. 텍스트 필드를 누르면 자동적으로 키보드가 올라오지만 사라지게는 직접 작성해줘야 합니다. 왜냐하면 유저가 텍스트 필드를 탭 하면 "음 얘 글자 입력하겠네!!!!!!!!!!!" 파악하고 자동으로 키보드를 올라오게 하지만, 유저가 글자 입력을 완료하는 시점은 모르기 때문에 자동으로 키보드를 내려주진 못합니다. 그럼 키보드를 어떻게 내리는지 살펴봅시다. 1) UITextFieldDelegate 사용 먼저 해당 뷰컨트롤러에 UITextFieldDelegate 프로토콜을 준수해줍니다. 아래 이미지와 같이 UITextField를 생성했고 이름은 nameTextField로 정했습니다. 그리고 델리게이트를 사용하기 위해 뷰컨..
CGFloat를 말하기전에 float과 double에 대해서 간단히 살펴봅시다. float is a single - precision, floating - point value type. 즉 실수타입의 단정밀도 32비트 부동 소수형입니다. double is a dobule - precision, floating - point value type 즉 실수타입의 배정밀도 64비트 부동 소수형입니다. CGFloat란 자동적으로 플랫폼에 따라 32비트는 float이 되고, 64비트에서는 double입니다. 말 그대로 float일수도 있고 double일수도 있고 이는 CPU 아키텍처에 따라 다릅니다. 개발문서를 살펴보면 float과 double에 대한 typedef가 CGFloat입니다. typedef doubl..
UIViewPropertyAnimator UIViewPropertyAnimator는 iOS10에 소개된 클래스입니다. 이는 뷰의 변경 사항에 대해 애니메이션을 적용하고 해당 애니메이션을 동적으로 수정할 수 있는 클래스입니다. 또한 frame, center, alpha, transform를 사용해 인터렉티브 한 애니메이션을 가능하게 해 주며 타이밍을 제어할 수 있습니다. 예를 들어 뷰를 서서히 사라지게 하고 싶다면 애니메이션 블록에서 alpha 값을 1에서 0으로 변경해주면 됩니다. 애니메이션을 추가하고 싶다면 add 메서드를 사용하여 원래 애니메이션이 시작된 후 애니메이션 블록을 추가할 수도 있습니다. UIViewPropertyAnimator를 직접 사용해 봅니다. 아래 프로젝트는 슬라이더의 값에 따라 ..
애드몹을 통해 모바일에 광고를 달 수 있습니다. 기존에 존재했던 프로젝트에 구글 애드몹을 적용해봤습니다. 먼저 구글 애드몹에 들어가셔서 https://apps.admob.com/v2/home 앱 추가를 해줍니다. 그러면 아래와 같은 화면이 나올 거예요. 본인이 앱 스토어에 등록하셨으면 예 아니면 아니요를 눌러주세요. 저는 이미 등록한 프로젝트에 적용한 거라 예를 눌렀습니다. 앱 이름이나 개발자 이름 또는 앱 ID로 검색하면 프로젝트가 뜹니다. 원하는 프로젝트를 추가해주세요. 앱을 추가해주면 앱 ID가 생성됩니다. 여기서 생성된 앱 ID를 어디에 복사해놔 주세요. 이거 필요해요. 애드몹을 실행하려면 앱의 소스코드와 info.plist파일에 추가해줘야 합니다. 다음 단계로 광고 단위를 만들어 줍니다. 여기서..
디스패치 세마포어를 알아보기 전에 세마포어는 무엇일까요? 세마포어는 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것입니다. 뮤텍스는 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것입니다. 또한 세마포어는 뮤텍스가 될 수 있습니다. (그 반대는 불가합니다.) 이제 디스패치 프레임워크 내에 있는 디스패치 세마포어 클래스에 대해서 알아보겠습니다. 디스패치 세마포어를 사용하게 된 계기는 async한 작업을 sync하게 변경시켜보는 시도에 세마포어를 사용하면 어떨까 싶었고, 한 번도 사용해보지 못했던 클래스라 궁금했었기에 사용해봤습니다. 그럼 애플에서 제공하는 공식문서를 살펴봅시다. 디스패치 세마포어란 다중 실행 콘텍스트에서 자원 접근을 제어하는 객체입니다. 디스패치 세마포어는 전통적..
수요일에 받은 코드 리뷰를 통해 좋은 말씀들을 많이 해주셔서 하나씩 학습해 정리해보려 합니다. 그중에서도 제네릭과 프로토콜을 활용해 dequeueReusableCell을 어떻게 처리하는지 알아보았습니다. 먼저 테이블 뷰에 테이블 뷰 셀을 나타내게 하려면 어떻게 하시나요. 테이블 뷰는 데이터 자체를 관리하지는 않고, 표현되는 데이터만 관리합니다. 그래서 우리는 UITableViewDataSource를 채택해 필수 메소드를 적어줍니다. 이 친구들이 관리를 합니다. 아래는 UITableViewDataSource에 필수 메소드를 작성한 코드입니다. // Return the number of rows for the table. override func tableView(_ tableView: UITableView..
디스패치 그룹은 단일 장치와 같이 task들의 그룹을 모니터 하는 것입니다. 디스패치 그룹을 사용하게 된 이유는 여러 개의 request를 날렸고 response가 끝나는 시점을 잡아 한 번에 UI를 업데이트시키기 위해 DispatchGroup을 사용하게 되었습니다. DispatchGroup을 사용하기 이전에는 어떻게 처리했냐면.. 음 프로퍼티 옵서버를 사용했습니다. didSet을 사용하면 프로퍼티가 변경된 바로 직후를 파악할 수 있어서 그냥 프로퍼티 옵저버를 사용했습니다. 다시 말해 API콜을 날리면 response데이터로 weatherInfo을 하나씩 받게 되고, 받은 데이터를 weather에 append 해주는 방식으로 처리했습니다. 위와 같이 제가 초기에 구현했던 코드로 여러 reponse데이터를..
- Total
- Today
- Yesterday
- 책 후기
- rxswift
- SWIFT
- string
- iOS SwiftUI
- swiftUI
- 스위프트UI
- 책 추천
- 딥러닝
- 문자열
- objc
- wwdc
- 독서
- 스위프트
- ios
- stanford SwiftUI
- 애니메이션
- RX
- Deep learning
- Algorithm
- 머신러닝
- Xcode
- objective-c
- ReactiveX
- ARC
- leetcode
- Animation
- 책
- 알고리즘
- swift5
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |