自定义UISwitch与图像

时间:2013-04-29 14:51:35

标签: iphone objective-c uisegmentedcontrol uiswitch

我需要在项目中实现自定义开关。目前我发现我们无法改变UISwitch的实现方式,如下图所示。我已经关注帖子并通过stackoverflow和其他博客搜索,但没有找到所需的解决方案。一种方法是在this帖子中使用UISegmented控件,但这也不能解决我的问题。

enter image description here

提前感谢您提供任何帮助

4 个答案:

答案 0 :(得分:22)

创建自己的交换机有什么困难? UISwitch是一个控件,基本上只是一个发送消息的视图 - 具有两个状态。您可以这样设置:

  • 容器视图:带圆角的简单视图(设置视图图层的cornerRadius)和背景颜色

  • 左图:显示您想要在左侧显示的图像的图像视图,即示例的复选标记

  • 右图:显示您想要在右侧显示的图像的图像视图,即示例中的X标记

  • 滑块:显示开关滑块部分的图像视图,设置在其他两个图像视图上方

当用户点击或滑动控件时,使用Core Animation将滑块移动到开关的另一侧并更新控件的状态,并快速淡入新状态的背景颜色。将控件的操作发送给目标。

答案 1 :(得分:20)

正如gasparuff所说,你也可以用UIButton来做,只需设置图像:

[button setImage:[UIImage imageNamed:@"image_on"] forState:UIControlStateSelected];
[button setImage:[UIImage imageNamed:@"image_off"] forState:UIControlStateNormal];

并点击它时只需切换选定的属性。

- (void) buttonTap {
    button.selected = !button.selected;
}

会自动更改图像。

答案 2 :(得分:1)

看起来你只想让你的控件只有2个状态 - 启用和禁用。

一种简单的方法是创建2个png图像并使用带有背景图像的自定义UIButton,并在每次点击按钮时替换这2个图像。

这是你想要做的事情,还是我误解了什么?

答案 3 :(得分:1)

您了解-[UISwitch setOnImage:]-[UISwitch setOffImage:],对吗?还-[UISwitch setTintColor]。关于唯一的缺点我可以看到,交换机本身将是标准的iOS交换机(圆形按钮),但是,否则,这将是最类似iOS的解决方案。

实现自己的on / offImage时,请记住尺寸限制,并且图像朝向开关的一侧是凹的。 tintColor可用于使交换机的其余部分反映您的配色方案。您可能希望跟踪valueChanged事件,以便更改色调颜色。

如果您需要在问题中显示的确切外观(方形切换按钮),那么您可能想要使用自定义控件,如@Caleb建议的那样。