我需要为我的iPhone应用程序创建一个自定义垂直滑块,因为UISlider要缩小。它将被用作我的遥控直升机的油门“棒”。 我设法用
旋转xcode中的滑块throttleSlider.transform = CGAffineTransformMakeRotation(3*M_PI_2);
但我觉得这很难看,因为滑块仍然在我的故事板上水平显示。另外,我无法找到使滑块更宽的地方。
我将如何解决这个问题?
谢谢。
答案 0 :(得分:3)
之前我从Catamount Software的博客中使用了UICustomSwitch
的这种实现:
它尝试自定义熟悉的UISwitch
类,但它通过继承UISlider
并使用自定义图像替换普通切换图像来实现此目的。您可以下载此代码,然后用您自己绘制的内容替换包含的图像。
因为这是一个只有开启和关闭设置的开关,你会看到它响应这个触摸:
[self setOn:on animated:YES];
只需删除调用setOn:animated:
的代码,以便滑块不会将其值一直强制为0.0或1.0。
答案 1 :(得分:3)
在我正在开发的应用程序中,我们现在需要一个自定义滑块。它必须更宽(44像素宽,表格视图单元格的默认大小)。我们通过使用可伸缩图像并调整滑块的属性来实现我们的目标:
UIImage* sliderCenterImage = [UIImage imageNamed:@"sliderCenter.png"];
[slider setThumbImage:sliderCenterImage forState:UIControlStateNormal];
UIImage *leftStretch2 = [[UIImage imageNamed:@"sliderLeft.png"]
stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
slider setMinimumTrackImage:leftStretch2 forState:UIControlStateNormal];
UIImage *rightStretch = [[UIImage imageNamed:@"sliderRight.png"]
stretchableImageWithLeftCapWidth:1.0 topCapHeight:0.0];
[slider setMaximumTrackImage:rightStretch2 forState:UIControlStateNormal];
这样我就有了一个滑块,可以完成tableView的整个单元格。 thumbImage是表示滑块中间的图像(与之交互的图像,默认为圆点),minimumTrackImage将是滑块左侧的部分(默认为蓝色的部分),maximumTrackImage是部分通常在滑块中心的右侧留空。 UISlider有更多属性允许进一步定制。看看UISlider developer reference
希望这有帮助。
答案 2 :(得分:0)
作为更新的答案,不推荐使用stretchableImageWithLeftCapWidth。建议使用
对于swift中的自定义滑块:
var thumb = UIImage(named: "slider_thumb")
musicSlider.setThumbImage(thumb, forState: UIControlState.Normal)
var left = UIImage(named: "left_slide")?.resizableImageWithCapInsets(UIEdgeInsets(top: 0.0,left: 0.0,bottom: 0.0,right: 0.0))
musicSlider.setMinimumTrackImage(left, forState: UIControlState.Normal)
var right = UIImage(named: "right_slide")?.resizableImageWithCapInsets(UIEdgeInsets(top: 0.0,left: 0.0,bottom: 0.0,right: 0.0))
musicSlider.setMaximumTrackImage(right, forState: UIControlState.Normal)
UIEdgeInserts指定不会调整大小的图像的缓冲区。所以左:15.0意味着从左边15像素的区域将不会调整大小。就我而言,我并不在意,所以全部为零。
作为一个注释,图像本身就是滑块更宽的原因。我的拇指图像高度为35像素,我的左右滑块图像高度为20像素。所有都是从Images.xcassets切片和调整大小(应保留图像)
答案 3 :(得分:-1)
没有办法让UISlider更宽广。为什么不制作自己的滑块扩展UIControl类并处理触摸事件。