我想实现一个类似滑块的组件,就像从Roambi截取的截图底部的组件.对于那些没有使用过Roambi的人来说,这个滑块是双倍范围的,即你可以从两端的蓝条中定义范围.然后,为了指示您感兴趣的数据区域,您可以将这些蓝色条之间的灰色区域向左/向右移动.

为实现这一点,我想到了两件事:
左右蓝条是UIViews.我在这些视图上处理触摸事件以定义范围.这两个酒吧之间的中间区域也是UIView.我在此视图上处理触摸事件以向左/向右移动以定义数据区域.
我可以实现双程序UISlider以获得蓝条的功能.(我已经学会了如何做到这一点.)但后来我不知道如何移动滑块的主体来定义数据范围.这可能吗?
还有,还有另一种实现方法吗?
我想通过点击而不是通过拖动滑块拇指来点击UISlider上的特定点来触发动作.
如何在某个点上点击UISlider来设置滑块值?
一段代码将不胜感激.
我正在尝试制作一个有着厚重音轨的UISlider.我试过这个,它几乎可以工作.但是,首次显示UISlider时,轨迹栏是正常的.只有当它获得触摸事件时才会变得更厚.
这是我添加到我的UISlider子类中的代码,如下所示:
- (CGRect)trackRectForBounds:(CGRect)bounds
{
return bounds;
}
Run Code Online (Sandbox Code Playgroud)
我不明白这是如何工作的,所以我无法弄清楚它为什么不能完美运作.这是我的问题:
当然,第三个问题是最重要的,尽管其他问题会帮助我理解.
还有一件事要考虑:首次显示时,我隐藏了拇指:
[slider setThumbImage:[[UIImage alloc] init] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
当用户触摸滑块时,我会像这样显示拇指:
[slider setThumbImage:nil forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
我提到这个是因为我想知道这是否会以某种方式干扰trackRectForBounds魔术.
谢谢!
iOS滑块的(默认)拇指图像的确切大小(宽度,高度)是多少?是否有一些聪明的方法来哄骗这个系统(XCode,iOS)?
我试过了
int thumbWidth = slider.currentThumbImage.size.width;
Run Code Online (Sandbox Code Playgroud)
我在这个网站上找到了它,但它回来了0.
附加问题:Xcode调试器在UISlider:中显示了这个未记录的变量CGFloat _hitOffset.有没有人偶然知道它是什么以及它的用途是什么?
我以为你可以在精灵套件应用程序中添加UIKit滑块/或按钮.
但无法弄清楚如何做到这一点,以编程方式创建滑块的代码是
if (self.view) {
CGRect frame = CGRectMake(0.0, 0.0, 200.0, 300);
UISlider *slider = [[UISlider alloc] initWithFrame:frame];
//[slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged];
[slider setBackgroundColor:[UIColor clearColor]];
slider.minimumValue = 0.0;
slider.maximumValue = 50.0;
slider.continuous = YES;
[self.view addSubview:slider];
NSLog(@"View is alive - look for slider...");
}
else {
NSLog(@"No View!!");
}
Run Code Online (Sandbox Code Playgroud)
以上不起作用,视图的子视图数量保持不变
我假设我必须将它作为子项添加到我的图层(SKNode),但addChild方法不适用于UISlider.它需要是一个SKNode本身.
我在这里的场景课中叫这个
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
// thought putting here would work
// but self.view is nil
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
感谢评论,我可以让它显示 - 但我必须在viewController类中添加,就像这样 …
我需要更改a的背景UISlider,我的目标是创建UISlider,如下图所示:

我试过setBackgroundImage方法,但它就像滑块的框架.
如何更改滑块的背景图像?
我正试图在UISlider中将一个额外的UIView放在拇指上方.为此,我需要拇指图像的宽度.在iOS6中,这很好用.我可以用:
CGFloat thumbWidth = self.navSlider.currentThumbImage.size.width;
Run Code Online (Sandbox Code Playgroud)
(如下所示:如何获得UISlider拇指图像的中心)
这在iOS7中返回0.0f.我也试过用它来阅读:
UIImage *thumb = [self.navSlider thumbImageForState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
但拇指结束为零.
是否可以读取默认滑块拇指图像的大小?或者我必须找到它,设置一个常量,以及Apple如何在以后不改变它?
我正在尝试实现一个控件来显示视频的进度,我正在使用带有自定义拇指图像的UISlider,但拇指图像不是从头开始,也不会一直持续到最后.
playerProgress = UISlider(frame: CGRectMake((btnImage.size.width + 2 * VideoViewControllerUX.ControlPadding), 0, (screenRect.size.width - (btnImage.size.width + 3 * VideoViewControllerUX.ControlPadding)), btnImage.size.height))
playerProgress.setThumbImage(UIImage(named: "slider"), forState: UIControlState.Normal)
playerProgress.maximumValue = 100
playerProgress.minimumValue = 0
playerProgress.addTarget(self, action: "playerProgressChanged:", forControlEvents: UIControlEvents.ValueChanged)
Run Code Online (Sandbox Code Playgroud)

我不知道最近发生了什么.
拇指图像: 
我在表格视图单元格中有一个滑块,我正在尝试将标签的文本设置为滑块的值.但是,文本未设置为更改的滑块值.我究竟做错了什么?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
if indexPath.section == 0 {
let slider = UISlider(frame: CGRectMake(0, 0, 320, 44))
slider.userInteractionEnabled = true
slider.minimumValue = 1
slider.maximumValue = 100
slider.value = 50
slider.continuous = true
cell.addSubview(slider)
println(cell.bounds)
let label = UILabel(frame: CGRectMake(260, -20, 100, 20))
var theValue = Int(slider.value)
label.text = "\(theValue)" + "mi."
cell.addSubview(label)
}
Run Code Online (Sandbox Code Playgroud) 我在我的一个App中实现了Vertical Slider UISlider.当滚动结束/完成时,我将使用Slider值向服务器发送命令.有时当我快速向上/向下滚动并释放时,滑块值在发送命令之前和发送命令之后变得不匹配.
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"Value of Slider before sending command=%f",self.value);
[self sendCommand]; // Here value is something else
[super touchesEnded:touches withEvent:event];
NSLog(@"Slider value after sending command=%f",self.value); // Here value changed
}
Run Code Online (Sandbox Code Playgroud)
但如果我在发送命令之前发出超级调用,那么一切正常.请解释是否有人知道为什么会这样.
[super touchesEnded:touches withEvent:event];
Run Code Online (Sandbox Code Playgroud)
更有趣的事实是,如果我不打电话给超级,那么一切都运作良好.
uislider ×10
ios ×9
objective-c ×3
cocoa-touch ×2
iphone ×2
swift ×2
range ×1
sprite-kit ×1
uikit ×1
uilabel ×1
xcode ×1