Swift 滑动手势会中断iOS 13中的UISlider控制,但不会中断以前的iOS版本

Swift 滑动手势会中断iOS 13中的UISlider控制,但不会中断以前的iOS版本,swift,uislider,ios13,uiswipegesturerecognizer,Swift,Uislider,Ios13,Uiswipegesturerecognizer,注意:这是iOS 13测试版,但也可能适用于明天的正式发布 更新2:我用更大的拇指图像替换了它,但我仍然有问题 更新:如果我超精确地触摸滑块上的拇指,它看起来仍然可以连续控制。但为什么会改变,我如何才能像以前一样控制它 我的视图中添加了一个滑动手势识别器: let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) swipeRight

注意:这是iOS 13测试版,但也可能适用于明天的正式发布

更新2:我用更大的拇指图像替换了它,但我仍然有问题

更新:如果我超精确地触摸滑块上的拇指,它看起来仍然可以连续控制。但为什么会改变,我如何才能像以前一样控制它

我的视图中添加了一个滑动手势识别器:

    let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
    swipeRight.direction = UISwipeGestureRecognizer.Direction.right
    self.view.addGestureRecognizer(swipeRight)
稍后,我将在同一视图中添加UISlider:

        let slider = UISlider()
        let sliderLength:CGFloat = 175
        slider.frame = CGRect(x:0,
                              y:CGFloat(customHeight) - 35,
                              width:sliderLength,
                              height:35)


        slider.minimumValue = -1.2 
        slider.maximumValue = 0.6
        slider.setValue(Float(snowSliderValAdder), animated: false)

        slider.addTarget(self, action: #selector(self.updateSnowSliderValue(_:)), for: .valueChanged)

        view.addSubview(slider)

以前工作正常的,现在在iOS 13中表现不佳。如果我移动滑块非常缓慢,我可以移动滑块上的拇指,但是如果我做任何类型的滑动运动,滑块上的拇指将停止移动,并触发手势。我如何才能阻止这种情况发生?

我遇到了同样的问题,并通过执行以下操作解决了它:

向滑块添加一个不起任何作用的panGesture,并将其cancelsTouchesInView属性设置为false

let panGesture = UIPanGestureRecognizer(target: nil, action:nil)
                    panGesture.cancelsTouchesInView = false
                    slider.addGestureRecognizer(panGesture)

现在你的滑块应该像切黄油的刀子一样滑动,没有滑动中断

在最后一个小时里,我试图找到一些东西。它看起来像是滑动手势识别器与UISlider的干扰

仅当使用右/左方向时,问题才会出现。也许你应该在更新你的应用程序或改变你的用户界面之前等待,以使用向上/向下滑动手势


此时,如果在移动手指之前稍等,滑块将正常工作。希望苹果能很快解决这个问题。

我所做的就是使用手势识别器功能,如果在我的UISlider上检测到触摸,就停止任何手势。确保添加UIGestureRecognitzerDelegate并将UIWipeGestureRecognitzer的委托设置为self

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {

   if touch.view == self.view.viewWithTag(viewTags.MySlider.rawValue) {
        return false
   }
   else if touch.view == self.view.viewWithTag(viewTags.AnotherSlider.rawValue) {
        return false
   }

   return true
}

SWIFT 5

使用手势识别器的委托方法可以解决此问题,如下所示

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    if touch.view?.isKind(of: UISlider.self) ?? false {
        return false
    } else {
        return true
    }
}

重写已创建的自定义视图的方法也可以解决此问题

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    return gestureRecognizer.view is Your_Custom_View
}

滑块是否在卡模式视图控制器中?“取消”手势可能会干扰您的滑动手势。您是否尝试实现
手势识别器(\uuU5shouldReceive:)
以检查滑动条上是否发生了滑动,如果是,则返回false?@Gereon-我现在就可以使用它了。我需要将UIgestureRecognitzerDelegate添加到我的视图中,并将刷卡委托分配给self。我很想看看解决方案-为什么不将其作为答案发布?嗨@Gereon,我添加了一个答案。你是从哪里毕业的?霍格沃茨?这不管用(2020年5月),感觉很“黑”。正确的方法是什么?这个线程有正确的答案,显示正确的方法-你救了我一天!谢谢你!