2012-07-19 106 views
1

我需要为我的iPhone应用创建自定义垂直滑块,因为UISlider会缩小范围。它将被用作我的遥控直升机的油门“棍子”。 我设法与为iPhone创建自定义滑块

throttleSlider.transform = CGAffineTransformMakeRotation(3*M_PI_2); 

旋转在Xcode滑块,但我认为这是相当丑陋,因为滑板仍然在我的故事板水平出现。此外,我无法找到使滑块更宽。

我将如何处理这个问题?

谢谢。

+0

故事板不会反映您以编程方式执行的更改。 – 2012-07-19 08:59:39

+0

这是正确的:) – chwi 2012-07-19 09:01:01

回答

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

希望这会有所帮助。

+0

伟大的信息!谢谢。为什么加倍'[滑块setMaximumTrackImage:rightStretch2 forState:UIControlStateNormal];'? – chwi 2012-07-19 09:24:40

+0

@Wilhelmsen对不起,复制粘贴的问题!我会编辑修复它。 – 2012-07-19 09:29:30

+0

顺便说一句,你在哪种方法实现?滑块更新时? viewDidLoad中? – chwi 2012-07-19 10:55:15

3

我用这个实施UICustomSwitch之前,从美洲豹软件的博客:

UICustomSwitch

它试图以自定义熟悉UISwitch类,但它通过继承UISlider,并更换正常开关实现这一自定义图像的图像。你可以下载这个代码,然后用你自己绘制的东西替换包含的图像。

,因为这是打算成为一个开关,它只有开和关的设置,你会看到,它响应触摸本:

[self setOn:on animated:YES]; 

刚刚摆脱调用的代码setOn:animated:,以便滑块不会将其值强制设置为0.0或1.0。

+0

我会看着这个,谢谢 – chwi 2012-07-19 09:01:42

-1

没有办法让UISlider更宽。为什么不让自己的滑块扩展UIControl类并处理触摸事件。

+0

而我不知道如何...... – chwi 2012-07-19 09:00:04

+0

这绝对是错误的。我做了一个更宽的滑块。 – 2012-07-19 09:04:16

+0

@那家伙,你能告诉我怎么样吗? – 2012-07-19 10:39:28

0

作为已更新的答案,不推荐使用stretchableImageWithLeftCapWidth。它建议使用

resizableImageWithCapInsets

对于自定义滑块在迅速:

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中切片并调整大小(其中应保留图片)