[IOS]#6 Timer

East Silver·2022년 1월 2일
0

Date Picker - timer

아래와 같은 옵션으로 생성한다면 타이머로써 Date Picker를 활용 할 수 있다

.countDownDuration: 타이머로 설정된 시간

enum과 switch문 활용

enum TimerStatus {
  case start
  case pause
  case end
}

switch문으로 Timer의 상태에 따라서 다양한 것들을 효과적으로 처리 할 수 있다

var timerStatus: TimerStatus = .end

switch self.timerStatus {
    case .end:
    	//do something
    case .start:
    	//do something
    case .pause:
    	//do something
    }

Button

.setTitle(title: String?, for: UIControl.State): 버튼의 상태에 따라 버튼의 타이틀을 변경 할 수 있다.

Timer

공식 문서
Timer Class보다 일시정지와 재시작을 쉽게 할 수 있는 방법이다.
DispatchSourceTimer는 GCD API에서 제공된다.

우리가 작성한 코드는 cocoa에서 실행되는데, cocoa가 코드를 main Tread에서 호출하기 때문이다.
main thread는 인터페이스 thread라고도 불린다.
인터페이스에 접근하면 event는 main thread에 전달되고 우리가 적성한 코드는 이에 반응 한다. 인터페이스 관련된 코드들은 main thread에서 작성되어야 한다.
즉, 원하는 작업이 UI와 관련이 있다면 main을 할당해주어야 합니다.

makeTimerSource
schedule
setEventHandler

// 시작
timer?.resume()

// 일시정지
timer?.suspend()

// 종료
timer?.cancel()
timer = nil

Timer를 종료할 때는 Timer에 꼭 nil을 할당하여 메모리에서 해제시켜주어야 합니다. 그렇지 않으면 화면을 벗어나도 Timer는 계속 동작하고 있을 것입니다.

또한, suspend인 상태에서 cancel을 하면 에러가 발생하기 때문에 주의해야 한다. 반드시 resume 상태에서 cancel 시켜야 한다.

Progress bar

progress는 0~1로 나타낼 수 있고 float 형태이다. 0으로 가까워질수록 빈 bar가 되고 1에 가까울 수 록 bar가 채워진다.

AudioToolBox

iponeDev Wiki에서 아이폰 시스템 오디오의 soundID를 알 수 있다.

AudioServicesPlaySystemSound(inSystemSoundID: SystemSoundID)

Alpha

0 ~ 1로 나타낼 수 있으며, 0에 가까울 수록 투명해진다.

CGAffineTransform

질문

cocoa가 코드를 main Tread에서 호출?
DispatchSourceTimer vs Timer
초단위 설정

profile
IOS programmer가 되고 싶다

0개의 댓글