Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何制作UISlider';s";轨道“;看不见的_Iphone_Objective C_Opacity_Uislider - Fatal编程技术网

Iphone 如何制作UISlider';s";轨道“;看不见的

Iphone 如何制作UISlider';s";轨道“;看不见的,iphone,objective-c,opacity,uislider,Iphone,Objective C,Opacity,Uislider,我试图在我的应用程序中模仿苹果的“滑动解锁”功能。我说到这一点(下图),但正如您所看到的,UISlider的“轨迹”是可见的,并且正在覆盖我的文本。有没有一种方法可以通过编程更改属性,从而使“轨迹”不可见 如果你需要我的代码,请告诉我 提前谢谢 编辑:如果我将滑块的alpha值更改为0,它将删除我的滑动按钮,因此这样做不会起作用,除非我做错了。:) 可能没有办法隐藏轨迹;“滑动解锁”的行为不像UISlider,可能是一个自定义控件。您可能可以通过将不透明度设置为较低(0将使其隐藏,并且不会收到

我试图在我的应用程序中模仿苹果的“滑动解锁”功能。我说到这一点(下图),但正如您所看到的,UISlider的“轨迹”是可见的,并且正在覆盖我的文本。有没有一种方法可以通过编程更改属性,从而使“轨迹”不可见

如果你需要我的代码,请告诉我

提前谢谢


编辑:如果我将滑块的alpha值更改为0,它将删除我的滑动按钮,因此这样做不会起作用,除非我做错了。:)

可能没有办法隐藏轨迹;“滑动解锁”的行为不像UISlider,可能是一个自定义控件。您可能可以通过将不透明度设置为较低(0将使其隐藏,并且不会收到触摸)来破解滑块控件,但如果您这样做,则在操作系统更新后可能会出现一些问题。苹果并不像微软那样为兼容性而竭尽全力

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

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

  • UIControlEventTouchDown:如果在手柄上,则设置“移动”标志
  • uicontrolEventTouchDragins:如果设置了移动标志,则将手柄移动到触摸位置;您只需更新一个实例变量,调用setNeedsDisplay将其绘制到新位置
  • UIControlEventTouchUpInside:如果设置了移动标志,并且手柄位于末端,则解锁

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

在回答前面提到的问题时,你可以为最小和最大轨迹图像设置一个透明的1px png。

事实上,我刚刚解决了这个问题。以下是我所做的:

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
只是我制作的一个清晰的滑块图像

现在我有了这个:耶!
这里有一个更简单的方法。不需要创建图像,只需实例化一个空的UIImage类:P

UIImage *clearImage = [[UIImage alloc] init];
[self.slider setMinimumTrackImage:clearImage forState:UIControlStateNormal];
[self.slider setMaximumTrackImage:clearImage forState:UIControlStateNormal];
迅速:

slider.setMinimumTrackImage(UIImage(), forState: .Normal)
slider.setMaximumTrackImage(UIImage(), forState: .Normal)

看起来只需将“淡色”设置为“清除”即可

    [slider setMinimumTrackTintColor:[UIColor clearColor]];
    [slider setMaximumTrackTintColor:[UIColor clearColor]];

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

这是它的Swift 3.0版本

slider.minimumTrackTintColor = UIColor.clear
slider.maximumTrackTintColor = UIColor.clear
故事板上的欢呼声:

最小轨迹
最大轨迹


回答得很好,我会尝试将不透明度更改为较低的设置,如果这不起作用,我将不得不尝试自行控制。谢谢你的回答!这正是问题所在,正如你在我上面的答案中所看到的,你一定没有及时看到我的答案。请选择benzado的答案。这种方法对于你想要实现的目标是正确的。顺便说一句,我从来没有想过这种方法。它比其他方法简单得多,速度也更快。这是一个非常简单的解决方案。你甚至不需要提供图像文件——请参阅其他答案。在iPad(iOS 8)上,仍然会绘制一个图像(可能是阴影)作为最小轨迹。复制幻灯片以解锁UI违反了苹果的人机界面准则。回答不错,但是我建议您在第一段代码之后删除所有内容。这与问题非常相切,与TL无关;DR表示,使用一个或两个空图像是可以的。