2017-06-16 72 views
0

,而把它應用到一個按鈕,錄製音頻問題在長按手勢識別

let longPress = UILongPressGestureRecognizer(target: self, action: "startRecording:") 
    longPress.minimumPressDuration=0 
    view.addGestureRecognizer(longPress) 
    blabButtonPressed.addGestureRecognizer(longPress) 



    func startRecording(press:UILongPressGestureRecognizer){ 


     if press.state == .began{ 
      recorder.record(forDuration: 8) 


     } 
     else if press.state == .ended{ 
      recorder.pause() 

     } 

    } 

它給了我

無法識別的選擇我一直有在Xcode中長按手勢識別的問題發送到實例0x100d0a790 2017年6月16日23:49:43.990785 + 0530 blabby [451:102183] ***終止應用程序由於未捕獲的異常 'NSInvalidArgumentException'

只要在運行時單擊手機上的該按鈕

回答

0

action參數中,應該傳遞一個選擇器來表示您要調用的方法。在Swift 3之前,您使用Selector("someMethod")語法來執行此操作。使用這種語法的缺點是你必須知道你在Objective-C中調用了什麼Swift方法,並且編譯器不檢查你是否得到了正確的名稱。此方法是Swift:

func startRecording(press:UILongPressGestureRecognizer){ 

某些在Objective-C中不稱爲startRecording:。它可以橋接爲startRecordingWithPress:或類似的東西(我不是這方面的專家)。

但是不要擔心!

Swift 3已經變得非常聰明,你不需要再通過字符串選擇器了!現在,您使用#selector(identifier)語法。這一次,編譯器檢查你的有效性!您所需要做的只是編寫方法名稱而已startRecording

let longPress = UILongPressGestureRecognizer(
    target: self, action: #selector(startRecording)) 

只有當你有不同的重載方法時,你才需要關心參數。

+0

謝謝,我想到了這一點以及..在參考一些視頻 –

+0

@AshutoshMane如果您認爲我的答案回答您的問題,請考慮通過點擊該選中標記來接受它! – Sweeper

+0

對不起夥伴錯過了.. –