1

我需要为我的 iPhone 应用程序创建一个自定义垂直滑块,仅仅是因为 UISlider 会变窄。它将用作我遥控直升机的油门“棒”。我设法在xcode中旋转滑块

throttleSlider.transform = CGAffineTransformMakeRotation(3*M_PI_2);

但我认为这很丑陋,因为滑块仍然水平出现在我的故事板上。另外,我无论如何都找不到使滑块更宽的方法。

我将如何解决这个问题?

谢谢你。

4

3 回答 3

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 开发者参考

希望这可以帮助。

于 2012-07-19T09:15:03.890 回答
3

我以前使用过这个实现UICustomSwitch,来自 Catamount Software 的博客:

UICustomSwitch

它尝试自定义熟悉的UISwitch类,但它通过子类化UISlider并用自定义图像替换正常的开关图像来实现这一点。您可以下载此代码,然后将包含的图像替换为您自己绘制的图像。

因为这是一个开关,它只有开和关设置,你会看到它用这个来响应触摸:

[self setOn:on animated:YES];

只需去掉调用的代码,setOn:animated:以便滑块不会将其值一直强制为 0.0 或 1.0。

于 2012-07-19T08:35:10.587 回答
0

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

resizableImageWithCapInsets

对于 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 指定不会调整大小的图像缓冲区。所以 left:15.0 意味着距离左侧 15 像素的区域不会被调整大小。就我而言,我不在乎,所以一切都为零。

请注意,图像本身就是使滑块变宽的原因。我的拇指图像高度为 35 像素,左右滑块图像高度为 20 像素。所有都从 Images.xcassets 切片和调整大小(应该保存图像)

于 2015-02-24T05:51:21.097 回答