Swift TIL ( 사운드 플레이 , 타이머 구현 )

 

 

오늘은 슬라이드를 이용한 시간 설정 후 시간이 다되면 특정한 소리를 내어 알려주는 미니 프로젝트를 진행하였다.
처음 배우는 타이머 구현 및 사운드 플레이와 같은 내용은 구글링을 통해 특정 키워드를 알아내고
알아낸 키워드를 바탕으로 재검색하여 사용할 수 있는 코드를 찾는 방법을 통해 접근하였다.

 

사운드플레이

사운드플레이를 사용하기 위에선 먼저 새로운 프레임워크를 선언해야한다.

import AVFoundation

그 후 어떠한 작업 후 소리가 나기를 원하는 함수 내 하단의 코드를 입력하면 입력한 사운드가 나오게 된다.

@IBAction func startButtonTapped(_ sender: UIButton) {
    AudioServicesPlayAlertSound(SystemSoundID(1322))
}

상기 내용은 버튼을 클릭하는 함수 내 사운드가 나오도록 설정할 경우, 버튼을 누르면 소리가 나게된다.

타이머

먼저 타이머를 담아줄 변수를 선언한다.

weak var timer: Timer?

슬라이드가 움직일때 마다 값을 변경하여야 하며, 슬라이더의 초수는 0.0 ~ 1.0 사이이므로 나는 마지막으로 설정할 수 있는 숫자의 수가 60이므로 60을 곱한 후 Int 로 감싸 .0의 자리수를 버리고 초수를 설정한다.

@IBAction func sliderChanged(_ sender: UISlider) {
        //슬라이더의 벨류값을 가지고 메인 레이블 값 세팅
        number = Int(sender.value * 60)
        mainLabel.text = "\(number) 초"
    }

타이머를 사용할 때 가장 중요한 것은 타이머가 무한정으로 혹은 중복 실행되는 것을 방지하기 위해
사용되는 함수마다 타이머의 비활성화 코드를 입력해줘야 한다.

time?.invalidate()

해당 내용을 바탕으로 스타트 버튼을 클릭할 때 1초마다 카운트가 줄어들며 실행되어야 하는 코드를 입력해준다.

@IBAction func startButtonTapped(_ sender: UIButton) {
	timer?.invalidate()
    timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) {[self] _ in
		if number > 0 {
        	number -= 1
    		
            slider.value = Float(number) / Float(60)
            mainLabel.text = "\(number) 초"
        } else {
        	number = 0
            mainLabel.text = "초를 선택하세요"
    		timer?.invalidate()

    }
}

withTimeInterval: 1.0 은 반복되는 초수를 설정하고, repeats 는 반복여부를 묻는다.

 

 

오늘의 정리

앱개발을 진행하다보면 나타나는 내가 모르는 개념을 어떻게 구글링을 통해 검색하여 찾아 코드를 사용하는지에 대해 자세하게 다뤄봤다.
하다가 아예 방법이 생각나지 않더라도 키워드를 찾아 검색 후 적용하는 방식에 대해 연습하자
새로운 프레임워크를 적용시켜 특정 사운드를 내는 방향은 비교적 수월하였으나,
타이머를 설정하여 오류없이 작동시키는 것은 다소 조금 복잡한 부분이 있어 반복 숙달 과정을 거치자