일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클린 코드
- 리팩토링
- ios
- collectionview
- rxswift
- SWIFT
- ribs
- Refactoring
- uitableview
- MVVM
- uiscrollview
- Xcode
- Observable
- Protocol
- UITextView
- Clean Code
- 애니메이션
- swift documentation
- Human interface guide
- combine
- swiftUI
- map
- HIG
- clean architecture
- 리펙토링
- RxCocoa
- 리펙터링
- 스위프트
- UICollectionView
- tableView
- Today
- Total
목록timer (8)
김종권의 iOS 앱 개발 알아가기
핑퐁 로직 PingPong을 사용하는 케이스는 일반적으로 웹소켓에서 사용 앱에서 서버에게 ping을 보내고, 서버로부터 pong을 받는 로직 만약 서버로부터 pong이 앱에서 설정한 특정 시간안에 안오면 lost connection으로 판단 주의할점 앱에서 서버에서 ping을 보낼때 throttle 적용 (만약 pong이 올때마다 ping을 날리면 짧은순간에 수많은 통신이 이루어짐) 핑퐁 구현 아이디어 ping을 보내는 부분 1) API.requestPing 수행 -> response를 받으면 다시 ping을 보내는 코드를 구현 2) 서버에ping을 보낼땐 항상 timer를 사용하여 시간을 체크하고 타이머가 다 된 경우, completion 처리를 수행 타이머는 Swift에서 제공하는 Timer를 사용하..
구현 아이디어 테두리에 관한 윤곽 레이아웃을 구하기 위해서 UIBezierPath를 사용 이 UIBezierPath의 cgPath값을 밑에 CAShapeLayer에서 사용 테두리에 도는 애니메이션을 적용하기 위해서 2가지의 CAShapeLayer를 사용 회색 선을 타나내는 CAShapeLayer 파란색으로 색상이 채워지는 CAShapeLayer CAShapeLayer 준비 회색 선 layer의 strokeEnd 값은 1.0으로 놓으면 원으로 칠해져 있는 상태 파란색 색상 layer의 strokeEnd 값의 초기값은 0으로 놓고, CABasicAnimation의 "strokeEnd" 애니메이션을 통해서 1초마다 strokeEnd값이 채워지도록 구현 커스텀뷰 필요한 요소 준비 윤곽 레이아웃 path 상태를 ..
편리함을 위한 사용한 프레임워크 pod 'RxSwift' pod 'RxCocoa' pod 'SnapKit' pod 'Then' 구현 아이디어 PhotoService라는 컴포넌트를 만든 후 이곳에서 Timer를 가지고 있고, 일정시간마다 이미지를 요청하여 Observable로 값 방출 단, 값이 바뀔때만 방출 (distinctUntilChanged) 사용하는쪽에서 PhotoService를 구독하고 있다가, 값이 방출되면 업데이트 구현 Photo값이 변경될때만 방출되도록 해야 하므로, Hashable 성격을 갖는 Photo모델 정의 // Photo.swift import UIKit struct Photo { var name: String var image: UIImage? { UIImage(named: se..
* 타이머 종류 - foreground에서만 동작하는 Timer - background에서도 동작하는듯한 Timer Foreground에서만 동작하는 Timer 변수 하나를 선언해놓고 RxSwift의 연산자 interval(_:scheduler:) 사용 // ViewController.swift private var currentCount = 0 private func setupOnlyForegroundTimer() { let timer = Observable.interval( .seconds(1), scheduler: MainScheduler.instance ) timer.withUnretained(self) .do(onNext: { weakSelf, countValue in weakSelf.curre..
1. Timer 구현하기 - UIDatePicker 개념, Timer로 구현 방법 2. Timer 구현하기 - DispatchSourceTimer로 구현 방법 (Background에서도 동작) 3. Timer 구현하기 - CircularProgressBar UI 구현(CAShapeLayer 사용), DispatchSourceTimer와 Timer로 타이머 구현 방법 아이디어 첫 번째 화면에서 UIDatePicker를 통해 시간을 선택하고 확인을 누르면 먼저 DispatchSourceTimer로 만든 모듈이 동작 확인 버튼을 눌렀을때 다음 화면에서 직접 만든 CircularTimerView에 타이머 관련된 정보를 표출 첫 번째 화면 SettinTimerVC는 글을 2. Timer 구현하기 - Dispatc..
1. Timer 구현하기 - UIDatePicker 개념, Timer로 구현 방법 2. Timer 구현하기 - DispatchSourceTimer로 구현 방법 (Background에서도 동작) 3. Timer 구현하기 - CircularProgressBar UI 구현(CAShapeLayer 사용), DispatchSourceTimer와 Timer로 구현 방법 UIDatePicker UI UIDatePicker UI 개념: https://ios-development.tistory.com/773 UI 코드 import UIKit class ViewController: UIViewController { lazy var countDownDatePicker: UIDatePicker = { let picker = ..
원리 Date()라는 것을 사용하여, 화면이 처음 등장한 시간 때를 기록 Timer의 scheduler에서 현재 시간과, 위의 기록된 시간을 비교하여 시간이 얼마나 지났는지 체크 위와 같이 하면, 사용자가 background에 갔다와도 시간이 흐른만큼 Timer에 반영 주요 코드 Timer객체를 전역에 선언 (Timer가 필요없을 때 invalidate시켜주기 위함) var timer = Timer() ... deinit { timer.invalidate() } 처음 화면이 들어난 시간을 기록하기 위해 Date형의 변수를 전역에 선언 var startTime: Date? Timer로직 함수 private func setTimer(startTime: Date) { DispatchQueue.main.asyn..
1. Buffering Operators 1) share(replay:), share(replay:scope:) 과거의 이벤트들을 subscriber에게 emit - replay 파라미터 : 버퍼사이즈 (얼마만큼의 element를 새로운 subscriber에게 emit할 것인지 - scope 파라미터 : subscriber의 수가 1에서 0으로 될 때 다음 동작 .whileConnected : 공유되고 있던 stream의 cache삭제 .forever : stream의 cache를 삭제하지 않음 이밖의 메소드 - replay(_:) - replayAll() - multicast(_:) - publish() 2. Time-shifting operators 이벤트 emit에 delay를 시킬 수 있는 연산자..