2013-04-29 93 views
17

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

enter image description here

预先感谢任何帮助

+0

UISegmentedControl有什么问题?我认为这是您尝试去做的方式。 – Odrakir 2013-04-29 14:53:40

+3

试试这个:https://github.com/twotoasters/TTSwitch – Desdenova 2013-04-29 14:58:48

+0

你的答案在这里:[SwiftySwitch](https://github.com/Sethmr/SwiftySwitch) – Sethmr 2017-01-30 21:07:01

回答

21

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

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

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

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

  • 滑块:示出该开关的滑动部的图像视图,其他两个图像视图上述设定

当用户点击或刷卡控制,使用核心动画在滑块移动到另一侧切换并更新控件的状态并快速淡出新状态的背景颜色。将控件的动作发送给目标。

+2

谢谢!我已经从你的答案中获得了解决方案。 – 2013-05-01 08:41:49

+0

它并不真实,苹果在切换时的美丽效果并不是那么简单。它是非线性形状的非线性动画。 – Curnelious 2016-12-23 14:12:07

+0

是的,我知道苹果公司努力使UISwitch看起来恰到好处,但这并不影响我上面写的任何内容。由OP决定将多少工作放入转换动画中,但Core Animation中提供的工具可以让我以非常令人愉快的方式实现所描述的内容。 – Caleb 2016-12-23 16:31:06

1

看起来你只是想你的控制,只有2个州 - 启用和禁用。

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

这是你想要做的还是我误解了一些东西?

+0

我猜滑动也是必需的 – makaron 2013-04-29 14:57:43

+0

我想要像在Twitter的视频分享应用“Vine”中一样进行复制。实际上,图片中显示的标题在该应用程序中顺畅滑动。我想添加一个按钮来改变状态不会导致头部的平滑滚动。感谢您的回应! – 2013-04-29 15:00:10

+0

好的,那么我想你会需要一些不同的方法。别客气。祝你好运,让我们知道,如果你找到了一些方法来做到这一点:-) – gasparuff 2013-04-29 15:04:08

18

由于gasparuff说,你也可以用一个UIButton做到这一点,只需设置图片:

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

当它的挖掘只需拨动所选属性。

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

这将自动更改图像。

+3

看不到他应该说它应该动画的地方。 – Odrakir 2014-07-15 09:03:32

1

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

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

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

+1

这只是iOS 6+ – 2013-06-30 15:30:02

+2

正确。 iOS6有92%的采用率(2013年6月)和攀升。 – Olie 2013-06-30 18:57:15