2017-10-16 206 views
0

我有一個已被竊聽我過去一天一個問題,我只是不能找出解決方案......UISlider不處理.touchUpInside事件妥善

我有一個UISlider,其範圍從值1至3(即我們需要它的方式)。滑塊是連續的,因爲它實際上根據當前值更新了一些屬性。現在我想要實現一個功能,其中滑塊觸發動作取決於用戶是否開始觸摸它,或者結束觸摸。

我嘗試使用.touchDown方法來檢測觸摸的開始,它完美地工作。但是,當我嘗試使用.touchUpInside.touchUpOutside來檢測用戶何時擡起他/她的手指時,該事件不會在適當的時間觸發。

當我在滑塊周圍拖動我的手指時,距離它的起點一定距離時,事件觸發。但是,當我只是簡單地觸摸它或將其移動一點點時,觸發事件根本不會觸發...

有人可以幫助我嗎?下面是我使用的設置我的滑塊代碼:

let slider: UISlider = { 
    let slider = UISlider() 
    slider.isContinuous = true 
    slider.minimumValue = 1 
    slider.maximumValue = 3 
    slider.setMinimumTrackImage(#imageLiteral(resourceName: "minimumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal) 
    slider.setMaximumTrackImage(#imageLiteral(resourceName: "maximumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal) 

    let sliderThumb = #imageLiteral(resourceName: "sliderThumbImage") 
    slider.setThumbImage(sliderThumb, for: .normal) 

    slider.addTarget(self, action: #selector(adjustPriceLabel), for: .valueChanged) 
    slider.addTarget(self, action: #selector(handleTouchDown), for: .touchDown) 
    slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside]) 

    slider.setValue(2.0, animated: true) 

    return slider 
}() 

@objc fileprivate func handleTouchDown() { 
    print(1234) 
} 

@objc fileprivate func handleTouchUp() { 
    print(5678) 
} 
+0

所以你說的就是你見'handleTouchDown()'被調用,有時'handleTouchUp()'不會被調用或?確切地說, – Ladislav

+0

。更具體地說,當我將滑塊從其起始位置移動一定距離時,handleTouchUp()只會被調用... –

+0

您可以嘗試移除'setMinimumTrackImage','setMaximumTrackImage'和'setThumbImage'並再次測試以查看您的自定義拇指圖像責怪? – Ladislav

回答

0

你應該嘗試添加.touchCancel狀態去handleTouchUp以及像這樣:

slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])