2016-10-01 5 views
0

볼륨 변경 이벤트가 아닌 버튼 누름을 감지하는 방법이 있습니까? 나는이 두 개의 게시물을 다음과 같은 시도,하지만 그들은 볼륨 변경되지 버튼 누름 감지 :스위프트 : 볼륨 감지 버튼 볼륨 변경 이벤트가 아닌 것을 누르십시오.

Cleanest way of capturing volume up/down button press on iOS8

swift detect volume button press

을 나는이 두 가지 이벤트를 사용할 수없는 이유는 내 응용 프로그램이 자동으로 특정 이벤트 기간 동안 볼륨을 조정하기 때문에,이다 . 앱이이를 수행 할 때 사용자가 수동으로 볼륨 버튼을 누른 것과 같은 이벤트가 아닙니다.

+0

왜 당신이 버튼을 구체적으로 눌렀을 때 알아야 할 것은 무엇? –

+0

알람 앱입니다. 알람이 울리면 내 앱이 시스템 볼륨을 현재 레벨에서 최대 레벨로 변경합니다. 이 볼륨 변경은 프로그래밍 방식이므로 사용자가 볼륨 버튼을 누르지 않아도 다음을 트리거합니다. AVAudioSession.sharedInstance(). addObserver (self, forKeyPath : "outputVolume", options : NSKeyValueObservingOptions.New, context : nil) – Pavel

+0

Makes 감각, 알람이 울린 후 관찰자를 제거하는 것이 더 쉬울까요? 코드에서 실행 가능하지 않습니까? –

답변

3

그래서 내가하고 싶은 것은 그들이 링크 된 질문에서하는 것처럼 알림에 가입 한 다음 say programmaticVolumeChange라는 변수를 추가하는 것입니다. 볼륨을 프로그래밍 방식으로 변경하면 변수가 true로 설정되고 observeValueForKeyPath 함수에서는 변수가 true이면 경보가 취소되지 않고 자연스럽게 false로 설정됩니다. 그런 식으로 사용자가 볼륨 버튼을 누르면 코드가 아님을 알 수 있습니다. 어쩌면 프로그래밍 방식의 볼륨 변경과 함수 호출 사이의 시간을 테스트 할 수도 있지만 괜찮을 것이라고 생각합니다.

var programmaticVolumeChange = false 

func changeVolumeProgramatically() { 

    programmaticVolumeChange = true 
    //change volume programmatically after 

} 

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, 
change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { 

    if keyPath == "outputVolume"{ 

     if programmaticVolumeChange { 

      programmaticVolumeChange = false 

     } else { 

      //handle logic for user volume button press 

     } 

    } 

} 
+0

정말 고마워요!당신의 간단한 논리는 시간을 절약합니다. – torap