20

我正在尝试在我的应用程序中模拟 Apple 的“滑动解锁”功能。我到了这一点(下图),但正如您所见,UISlider 的“轨道”是可见的,并且覆盖了我的文本。有没有办法以编程方式更改属性,使“轨道”不可见?

替代文字

如果您需要我的任何代码,请告诉我。

提前致谢!

编辑:如果我将滑块的 alpha 更改为 0,它将摆脱我的滑动按钮,所以除非我做错了,否则这样做是行不通的。:)

4

8 回答 8

26

这是一个更简单的方法。无需创建图像,只需实例化一个空的 UIImage 类:P

UIImage *clearImage = [[UIImage alloc] init];
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal];
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal];
于 2013-02-22T01:19:37.600 回答
25

其实我只是想通了。这是我所做的:

UIImage *sliderMinimum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0];
[slider setMinimumTrackImage:sliderMinimum forState:UIControlStateNormal];
UIImage *sliderMaximum = [[UIImage imageNamed:@"clearTrack.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:0];
[slider setMaximumTrackImage:sliderMaximum forState:UIControlStateNormal];

clearTrack.png只是我制作的一个清晰的滑块图像。

现在我有了这个:耶! 替代文字

于 2010-11-11T03:13:08.037 回答
6

可能没有办法隐藏轨道。“滑动解锁”的行为不像 UISlider 并且可能是自定义控件。您可能能够破解滑块控件,也许通过将不透明度设置为低(0 将使其隐藏并且不会接收触摸),但如果您走这条路,您可能会在操作系统更新后出现问题。苹果不会像微软那样为了兼容性而向后弯腰。

正确的方法是使用自定义控件。它可能看起来比使用 UISlider 需要更多的工作,但如果你将它与你花费和/或将花费在 UISlider 上的所有时间进行比较,它并不是。

要做到这一点:子类 UIControl。编写您自己的绘图代码以使其看起来正确(您可能可以重用您现在正在做的一些事情)。然后注册触摸事件以移动滑块手柄:

  • UIControlEventTouchDown:如果它在手柄上,设置一个“移动”标志
  • UIControlEventTouchDragInside:如果设置了移动标志,则将手柄移动到触摸位置;您可以只更新一个实例变量,调用 setNeedsDisplay 将其绘制到新位置。
  • UIControlEventTouchUpInside:如果设置了移动标志,并且手柄在结束,解锁

如果您想模仿真正的解锁手柄,请使用它并查看它的行为。您可能需要以不同的方式响应事件(如果您拖到滑块路径之外会发生什么情况)。但是你应该能够得到它的要点。

于 2010-11-11T02:42:01.537 回答
5

在斯威夫特:

slider.setMinimumTrackImage(UIImage(), forState: .Normal)
slider.setMaximumTrackImage(UIImage(), forState: .Normal)
于 2015-01-28T00:13:59.120 回答
3

在回答所述问题时,您可以为最小和最大轨道图像设置一个透明的 1px png。

于 2010-11-11T03:04:40.513 回答
3

看起来只是将色调设置为清除就可以了...

    [slider setMinimumTrackTintColor:[UIColor clearColor]];
    [slider setMaximumTrackTintColor:[UIColor clearColor]];
于 2016-09-26T18:45:04.733 回答
2

在我看来,@Arjay Waran 的回答是最好的。

这是它的 Swift 3.0 版本。

slider.minimumTrackTintColor = UIColor.clear
slider.maximumTrackTintColor = UIColor.clear

干杯

于 2017-07-11T12:29:17.237 回答
0

来自故事板:-

Min Track为和选择清晰的颜色Max Track

在此处输入图像描述

于 2018-07-28T05:18:24.090 回答