我正在尝试在我的应用程序中模拟 Apple 的“滑动解锁”功能。我到了这一点(下图),但正如您所见,UISlider 的“轨道”是可见的,并且覆盖了我的文本。有没有办法以编程方式更改属性,使“轨道”不可见?
如果您需要我的任何代码,请告诉我。
提前致谢!
编辑:如果我将滑块的 alpha 更改为 0,它将摆脱我的滑动按钮,所以除非我做错了,否则这样做是行不通的。:)
我正在尝试在我的应用程序中模拟 Apple 的“滑动解锁”功能。我到了这一点(下图),但正如您所见,UISlider 的“轨道”是可见的,并且覆盖了我的文本。有没有办法以编程方式更改属性,使“轨道”不可见?
如果您需要我的任何代码,请告诉我。
提前致谢!
编辑:如果我将滑块的 alpha 更改为 0,它将摆脱我的滑动按钮,所以除非我做错了,否则这样做是行不通的。:)
这是一个更简单的方法。无需创建图像,只需实例化一个空的 UIImage 类:P
UIImage *clearImage = [[UIImage alloc] init];
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal];
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal];
其实我只是想通了。这是我所做的:
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
只是我制作的一个清晰的滑块图像。
现在我有了这个:耶!
可能没有办法隐藏轨道。“滑动解锁”的行为不像 UISlider 并且可能是自定义控件。您可能能够破解滑块控件,也许通过将不透明度设置为低(0 将使其隐藏并且不会接收触摸),但如果您走这条路,您可能会在操作系统更新后出现问题。苹果不会像微软那样为了兼容性而向后弯腰。
正确的方法是使用自定义控件。它可能看起来比使用 UISlider 需要更多的工作,但如果你将它与你花费和/或将花费在 UISlider 上的所有时间进行比较,它并不是。
要做到这一点:子类 UIControl。编写您自己的绘图代码以使其看起来正确(您可能可以重用您现在正在做的一些事情)。然后注册触摸事件以移动滑块手柄:
如果您想模仿真正的解锁手柄,请使用它并查看它的行为。您可能需要以不同的方式响应事件(如果您拖到滑块路径之外会发生什么情况)。但是你应该能够得到它的要点。
在斯威夫特:
slider.setMinimumTrackImage(UIImage(), forState: .Normal)
slider.setMaximumTrackImage(UIImage(), forState: .Normal)
在回答所述问题时,您可以为最小和最大轨道图像设置一个透明的 1px png。
看起来只是将色调设置为清除就可以了...
[slider setMinimumTrackTintColor:[UIColor clearColor]];
[slider setMaximumTrackTintColor:[UIColor clearColor]];
在我看来,@Arjay Waran 的回答是最好的。
这是它的 Swift 3.0 版本。
slider.minimumTrackTintColor = UIColor.clear
slider.maximumTrackTintColor = UIColor.clear
干杯