问题在长按手势识别
问题描述:
,而把它应用到一个按钮,录制音频问题在长按手势识别
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'
只要在运行时单击手机上的该按钮
答
在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))
只有当你有不同的重载方法时,你才需要关心参数。
谢谢,我想到了这一点以及..在参考一些视频 –
@AshutoshMane如果您认为我的答案回答您的问题,请考虑通过点击该选中标记来接受它! – Sweeper
对不起伙伴错过了.. –