我遇到了与手势有关的问题,有点类似于:gesture-problem-uiswipegesturerecognizer-uislider

但是我快速编写代码,因此我需要快速解决方案。

我的项目中发生的事情是这样的:
我有一个ViewController,用户在屏幕上轻击即可执行segue。但是我在这个视图控制器上有一个UISlider,当用户“释放”滑块时,有时(为什么有时但并非总是如此,使我感到困惑)被视为屏幕上的点击。

因此,我知道我必须防止手势识别器“看到/识别” UIslider上的触摸。

但是如何防止这种情况? (在Swift 2.0中,使用Xcode7。但是如果您在答案中使用早期的Swift编码,我也理解它)
我是快速编码的新手。我希望有人能帮帮忙!

这是视图控制器中的代码:

// 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)

}

(编辑:)我使用在stackoverflow上找到的信息更新了代码。我添加了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
    }

}

但是,从未从控制台调用“shouldReceiveTouch”功能。那我想念什么呢?我是否正确设置了代表?

最佳答案

从不调用“shouldReceiveTouch”函数,因为您在“shouldReceiveTouch”函数中设置了委托。可以在调用函数之前将委托设置为self。
您需要做的是将委托设置在viewDidLoad()内,一切都很好。

override func viewDidLoad() {
  super.viewDidLoad()

  let touch = UITapGestureRecognizer(target: self, action: "touched:")
    self.view.addGestureRecognizer(touch)
    touch.delegate = self
}

关于ios - UITapGestureRecognizer会干扰UISlider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32757920/

10-13 06:34