Rok*_*arc 151
如果你不需要拖动之间的任何数据,那么你应该简单地设置:
[mySlider setContinuous: NO];
Run Code Online (Sandbox Code Playgroud)
这样,valueChanged只有当用户停止移动滑块时,您才会收到事件.
pin*_*nch 88
您可以为UIControlEventValueChanged 添加一个带有两个参数(发件人和事件)的操作:
[slider addTarget:self action:@selector(onSliderValChanged:forEvent:) forControlEvents:UIControlEventValueChanged]
Run Code Online (Sandbox Code Playgroud)
然后检查处理程序中触摸对象的阶段:
- (void)onSliderValChanged:(UISlider*)slider forEvent:(UIEvent*)event {
UITouch *touchEvent = [[event allTouches] anyObject];
switch (touchEvent.phase) {
case UITouchPhaseBegan:
// handle drag began
break;
case UITouchPhaseMoved:
// handle drag moved
break;
case UITouchPhaseEnded:
// handle drag ended
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特4
slider.addTarget(self, action: #selector(onSliderValChanged(slider:event:)), for: .valueChanged)
Run Code Online (Sandbox Code Playgroud)
@objc func onSliderValChanged(slider: UISlider, event: UIEvent) {
if let touchEvent = event.allTouches?.first {
switch touchEvent.phase {
case .began:
// handle drag began
case .moved:
// handle drag moved
case .ended:
// handle drag ended
default:
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意在Interface Builder中添加操作时,您还可以选择将发件人和事件参数添加到操作中.
tho*_*mas 69
我使用"Touch Up Inside"和"Touch up outside"通知.
界面生成器:
将Interface Builder中的两个通知连接到您的接收方法.该方法可能如下所示:
- (IBAction)lengthSliderDidEndSliding:(id)sender {
NSLog(@"Slider did end sliding... Do your stuff here");
}
Run Code Online (Sandbox Code Playgroud)
在代码中:
如果你想以编程方式连接它,你会在viewWillAppear(或适合你的任何地方)调用这样的东西:
[_mySlider addTarget:self
action:@selector(sliderDidEndSliding:)
forControlEvents:(UIControlEventTouchUpInside | UIControlEventTouchUpOutside)];
Run Code Online (Sandbox Code Playgroud)
接收方法如下所示:
- (void)sliderDidEndSliding:(NSNotification *)notification {
NSLog(@"Slider did end sliding... Do your stuff here");
}
Run Code Online (Sandbox Code Playgroud)
rob*_*off 17
由于UISlider是子类UIControl,您可以为其设置目标和操作UIControlEventTouchUpInside.
如果你想在代码中执行它,它看起来像这样:
[self.slider addTarget:self action:@selector(dragEndedForSlider:)
forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
dragEndedForSlider:当触摸结束时,它会向您发送消息.
如果要在笔尖中执行此操作,可以按住Ctrl键单击滑块以获取其连接菜单,然后从"Touch Up Inside"套接字拖动到目标对象.
您还应该为for UIControlEventTouchUpOutside和for 添加目标和操作UIControlEventTouchCancel.
Guy*_*her 14
添加目标touchUpInside和touchUpOutside事件.您可以以编程方式或从故事板中执行此操作.这是你以编程方式进行的
slider.addTarget(self, action: #selector(sliderDidEndSliding), for: [.touchUpInside, .touchUpOutside])
Run Code Online (Sandbox Code Playgroud)编写函数来处理滑块拖动的结束
func sliderDidEndSliding() {
print("end sliding")
}
Run Code Online (Sandbox Code Playgroud)您可以使用:
- (void)addTarget:(id)target action:(SEL)action
forControlEvents:(UIControlEvents)controlEvents
Run Code Online (Sandbox Code Playgroud)
检测UISlider中何时发生touchDown和touchUp事件
小智 5
斯威夫特 3 个回答
我遇到了同样的问题,最终让它起作用,所以也许它会帮助某人。将 your_Slider 连接到故事板中的“Value Changed”,当滑块移动时“Slider Touched”动作,松开时“Slider Released”。
@IBAction func your_Slider(_ sender: UISlider) {
if (yourSlider.isTracking) {
print("Slider Touched")
} else {
print("Slider Released")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55971 次 |
| 最近记录: |