오늘은 슬라이드를 이용한 시간 설정 후 시간이 다되면 특정한 소리를 내어 알려주는 미니 프로젝트를 진행하였다.
처음 배우는 타이머 구현 및 사운드 플레이와 같은 내용은 구글링을 통해 특정 키워드를 알아내고
알아낸 키워드를 바탕으로 재검색하여 사용할 수 있는 코드를 찾는 방법을 통해 접근하였다.
사운드플레이
사운드플레이를 사용하기 위에선 먼저 새로운 프레임워크를 선언해야한다.
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
는 반복여부를 묻는다.
오늘의 정리
앱개발을 진행하다보면 나타나는 내가 모르는 개념을 어떻게 구글링을 통해 검색하여 찾아 코드를 사용하는지에 대해 자세하게 다뤄봤다.
하다가 아예 방법이 생각나지 않더라도 키워드를 찾아 검색 후 적용하는 방식에 대해 연습하자
새로운 프레임워크를 적용시켜 특정 사운드를 내는 방향은 비교적 수월하였으나,
타이머를 설정하여 오류없이 작동시키는 것은 다소 조금 복잡한 부분이 있어 반복 숙달 과정을 거치자
'◽️ Programming > T I L' 카테고리의 다른 글
프로퍼티 옵저버 (didSet , willSet) , 타입 캐스팅 (is , as) (0) | 2024.03.10 |
---|---|
델리게이트 패턴 , 텍스트 필드 (0) | 2024.03.07 |
Swift (옵셔널 체이닝, Queue , Stack , Set , Overloading) (2) | 2024.03.06 |
Swift Tuple, Any, Character / mini project (0) | 2024.03.05 |
Type 오류 , Button Style 설정으로 인한 오류 해결 (0) | 2024.03.05 |