2017-06-16 268 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

对不起伙伴错过了.. –