- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有 UISlider:
slider = UISlider.alloc.initWithFrame([[20, 70)], [260, 40]])
我希望能够检测到用户何时点击它并知道在何处点击。我想我需要使用 UITapGestureRecognizer
或类似的东西,但我是新手,对这一切一无所知。
我可以通过以下方式了解 slider 何时被轻敲:
slider.addTarget(self, action:'sliderTaped', forControlEvents:UIControlEventTouchDown)
...但它只适用于拇指,所以这不是很有用,我宁愿捕获 slider 上的任何点击。
任何指向文档的指针或链接都将不胜感激。
相关问题/答案,但带有 objective-c:Clickable UISlider
最佳答案
要在 slider 更改时收到通知,您需要设置目标/操作
。target
是包含您要调用的方法的对象,action
是你想调用的方法。我调用了我的 action
sliderValueChanged:
。你可以选择任何东西。请务必将冒号附加到名称,因为这会告诉它向发送方发送一个指针,该发送方是 UISlider
对象。您需要发送者,以便您可以请求 slider 的值。
如果您没有为 slider 设置 minimumValue
和 maximumValue
,值的范围将从 0.0
到 1.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 时连续调用。要仅在用户停止触摸 slider 时收到通知,请设置:
slider.continuous = no
现在,如果您想要一个可点击的 slider ,将拇指移动到您点击的位置,那么您需要向 slider 添加一个 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
请注意,此代码通过双击移动 slider 。我只用一次点击就遇到了麻烦,因为如果你快速移动拇指,代码会将其视为点击并将拇指弹回其起始位置。设置 tapGestureRecognizer.numberOfTapsRequired = 1
以尝试单击。
关于iphone - 如何使用 RubyMotion 检测 UISlider 是否被点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12762703/
RubyMotion 中是否允许使用 mixin?我有一个包含两个文件的目录。一个是类,另一个是模块。当我在类中包含模块(mixin)时,出现未找到错误。 RM 中自动需要 app 下的所有内容,对吗
我想在 RubyMotion 中定义全局常量。声明全局常量的最佳方法是什么? 如果是 Rails,我认为将全局常量放在 config/initializers/constants.rb 中是常见的方法
这里难住了... 我正在测试 ruby motion 应用程序的 Release模式,但在尝试 rake device mode=release 时不断收到此错误 rake aborted! un
我有两个 Controller - 如何从控制台调用它们中的函数? (主要)> 最佳答案 我能弄清楚如何做到这一点的唯一方法是使用 UIApplication sharedApplication 类方
我正在寻找一种使用 base64 对字符串进行编码的简单方法。在 ruby motion 中,我不能只使用 Ruby 的 Base64encode,因为我无法要求它。所以我想我可以使用 Cocoa
我向 String 类添加了一个额外的方法。我想稍后使用此方法,但出现 no Method 错误。 class String def as_file_full_path NSSear
有没有办法在调用另一个函数时通过 addTarget 调用传递参数? 我也尝试过发件人方法 - 但这似乎也失败了。在不创建全局变量的情况下传递参数的正确方法是什么? @my_button = UIBu
我正在使用 RubyMotion 和 ProMotion gem 开发一个 iOS 应用程序。如何使用 ProMotion 创建自定义表格单元格?如果我使用内置在表格屏幕中,我只能使用默认的 iOS
我无法让 parse 与 rubymotion 一起使用。我尝试使用 cocoapod 并供应该项目。我一定错过了一些微不足道的事情。对我来说,理想的场景是使用 Pod,而不是供应项目,但我会使用
我正在 Rubymotion 中执行一个相当普通的调度队列,但它显然提前退出了。它永远不会通过 initWithContentsOfURL 调用。但是,删除 Dispatch::Queue 包装器并将
我只用 Promotion-Menu's Readme 中显示的代码做了一个新项目.我有这个: # app_delegate.rb class AppDelegate < PM::Delegate
如何将一个版本发布到暂存环境或为企业/临时分发创建一个版本? 这与 AppStore 版本不同,需要不同的配置文件,并且可以选择不同的包 ID。 最佳答案 您需要在您的 Rakefile 中添加一个条
如果这在 obj-c 中 @interface SomeClass : NSObject @property (nonatomic,strong) NSString* name; @end @impl
在网络屏幕内单击下拉菜单时,我的应用程序(这是一个 ruby Motion IOS 应用程序)出现卡住。 def thing open_modal WebScreen.new( name:
有谁知道为什么以下 RubyMotion 代码中的按钮在单击时不会触发 say_something 方法... class HomeViewController < UIViewController
我刚开始学习 ruby motion,在教程开始时我遇到了障碍!教程是《RubyMotion iOS 开发精要》。 这是我的代码: class RootController 2013-12-13
是否有更通用的方法来设置导航栏属性?我想将半透明设置为 false 并将图像设置为标题。对我来说奇怪的是,我可以在 app_delegate.rb 中设置 tintColor 和 barTintCol
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
由于 RubyMotion 似乎在编译时进行了大量类型转换,因此我无法将正确的数据类型传递到 NSMutableURLRequest POST 请求中。它期待 NSData,但我无法弄清楚如何在不引发
我正在使用 RubyMotion(之前一直在 Xcode 中编写 Obj C,但现在由于 Ruby 中的 bkgd,我正在与想要使用 RubyMotion 的人合作) 我有一个带有 2 个文本字段的
我是一名优秀的程序员,十分优秀!