簡體   English   中英

如何檢測使用RubyMotion敲擊了UISlider?

[英]How to detect that a UISlider has been tapped using RubyMotion?

我有UISlider:

slider = UISlider.alloc.initWithFrame([[20, 70)], [260, 40]])

我希望能夠檢測用戶何時單擊它並知道在哪里。 我認為我需要使用UITapGestureRecognizer或類似的工具,但是我很新,對這一切一無所知。

我可以找出滑塊何時被點擊:

slider.addTarget(self, action:'sliderTaped', forControlEvents:UIControlEventTouchDown)

...但是它只能用在拇指上,所以不是很有用,我寧願抓住滑塊上的任何輕按。

任何指向文檔的指針或鏈接將不勝感激。


相關問題/解答,但帶有Objective-c:可點擊的UISlider

要在更改滑塊后得到通知,您需要設置target/action target是包含要調用的方法的對象,而action是要調用的方法。 我稱我的action sliderValueChanged: 您可以選擇任何東西。 請確保在名稱后加上冒號,因為它告訴它將一個指針發送到作為UISlider對象的發送者。 您需要發送者,以便您可以要求滑塊的值。

如果您沒有為滑塊設置minimumValuemaximumValue ,則值的范圍為0.01.0

def viewDidLoad
    slider = UISlider.alloc.initWithFrame([[20, 70], [260, 40]])
    slider.addTarget(self, action:'sliderValueChanged:', forControlEvents:UIControlEventValueChanged)
    self.view.addSubview(slider)
end

def sliderValueChanged(sender)
    puts sender.value
end

如圖所示,隨着用戶移動滑塊, sliderValueChanged將被連續調用。 要僅在用戶停止觸摸滑塊時得到通知,請設置:

slider.continuous = no

現在,如果您想要一個可單擊的滑塊將拇指移動到單擊的位置,則需要UITapGestureRecognizer滑塊添加一個UITapGestureRecognizer 此代碼演示了這一點:

def viewDidLoad
    slider = UISlider.alloc.initWithFrame([[50, 50], [200, 40]])
    tapGestureRecognizer = UITapGestureRecognizer.alloc.initWithTarget(self, action:'sliderTapped:')
    tapGestureRecognizer.numberOfTapsRequired = 2
    slider.addGestureRecognizer(tapGestureRecognizer)

    slider.continuous = false
    slider.minimumValue = 77
    slider.maximumValue = 129
    slider.addTarget(self, action:'sliderValueChanged:', forControlEvents:UIControlEventValueChanged)
    self.view.addSubview(slider)
end

# This is called when the slider changes either from taps or from moving the thumb
def handle_new_slider_value(value)
    puts "New slider value: #{value}"
end

def sliderValueChanged(slider)
    handle_new_slider_value(slider.value)
end

# These were determined empirically by setting the thumb to the minimum and
# then clicking on the center and printing out gestureRecognizer.locationInView(slider).x
# and then repeating for the maximum.
SLIDER_MIN = 11
SLIDER_MAX = 189

def sliderTapped(gestureRecognizer)
    if gestureRecognizer.state == UIGestureRecognizerStateEnded
        slider = gestureRecognizer.view
        x = gestureRecognizer.locationInView(slider).x
        # Uncomment this to determine values for SLIDER_MIN/SLIDER_MAX
        # puts x
        x = SLIDER_MIN if x < SLIDER_MIN
        x = SLIDER_MAX if x > SLIDER_MAX
        slider_min_val = slider.minimumValue
        slider_max_val = slider.maximumValue

        # Convert from the location in the view to the slider value
        slider.value = slider_min_val + (x - SLIDER_MIN) / (SLIDER_MAX - SLIDER_MIN) * (slider_max_val - slider_min_val)
        handle_new_slider_value(slider.value)
    end
end

請注意,此代碼雙擊移動滑塊。 我只單擊一下就遇到了麻煩,因為如果您快速移動拇指,則代碼會將其視為輕擊並將拇指恢復到其初始位置。 設置tapGestureRecognizer.numberOfTapsRequired = 1可以一次點擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM