我有一个手势相关的问题,有点类似于:gesture-problem-uiswipegesturerecognizer-uislider
但是我用快速编码,所以我需要一个快速的解决方案。
在我的项目中发生的事情是:我有一个ViewController,用户在屏幕上点击它,就会执行一个segue。但是我在这个视图控制器上有一个UISlider,当用户‘释放’滑块时,它有时会被识别为屏幕上的一个点击(为什么有时也不是总是让我感到困惑)。
因此,我知道我必须防止手势识别器“看到/识别”UIslider上的触摸。
但我怎样才能阻止这一切呢?(在Speed2.0中,使用Xcode7。但我也理解,如果你在一个答案中使用更早的快速编码),我对快速编码相当陌生。我希望有人能帮忙!
以下是视图控制器中的代码:
// The slider
@IBOutlet weak var sliderValue: UISlider!
@IBAction func sliderValueChanged(sender: UISlider) {
// Do stuff
}
// UITapGestureRecognizer
override func viewDidLoad() {
super.viewDidLoad()
let touch = UITapGestureRecognizer(target: self, action: "touched:")
self.view.addGestureRecognizer(touch)
}
// Perform Segue
func touched (_: UIGestureRecognizer) {
//Segue to another viewcontroller
performSegueWithIdentifier("nice", sender: self)
}(编辑:)我用这里在堆栈溢出上找到的信息更新了代码。我增加了UIGestureRecognizerDelegate
class LampOn: UIViewController, UIGestureRecognizerDelegate {...}我加入了shouldReceiveTouch
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
gestureRecognizer.delegate = self
if (touch.view == sliderValue){
print("touching slider")
return false
}
else{
print("touching elsewhere")
return true
}
}但是“应该接收the”从未从控制台中被调用过。那么,我缺少了什么呢?我是否正确地设置了委托?
发布于 2015-10-12 13:11:53
"shouldReceiveTouch“函数从未被调用,因为您在"shouldReceiveTouch”函数中设置了委托。在调用函数之前,需要将委托设置为self。
您需要做的是在viewDidLoad()中设置委托,一切都应该很好。
override func viewDidLoad() {
super.viewDidLoad()
let touch = UITapGestureRecognizer(target: self, action: "touched:")
self.view.addGestureRecognizer(touch)
touch.delegate = self
}https://stackoverflow.com/questions/32757920
复制相似问题