【问题标题】:Custom UISwitch with image [closed]带有图像的自定义 UISwitch [关闭]
【发布时间】:2013-04-23 07:14:16
【问题描述】:

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

提前感谢您的帮助

【问题讨论】:

标签: iphone objective-c uisegmentedcontrol uiswitch


【解决方案1】:

创建自己的开关并不难。 UISwitch 是一个控件——本质上只是一个发送消息的视图——具有两种状态。您可以像这样设置自己的自定义控件:

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

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

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

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

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

【讨论】:

  • 谢谢!我已经从你的回答中得到了解决方案。
  • 这根本不是真的,苹果在切换时做出的漂亮效果并不是那么容易实现的。它是具有非线性形状的非线性动画。
  • 是的,我知道 Apple 努力使 UISwitch 看起来恰到好处,但这并不会使我在上面写的任何内容失效。由 OP 决定在过渡动画中投入多少工作,但 Core Animation 中可用的工具可以很容易地以一种非常令人愉悦的方式实现我所描述的内容。
【解决方案2】:

正如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】:

您知道-[UISwitch setOnImage:]-[UISwitch setOffImage:],对吧?还有-[UISwitch setTintColor]。关于我能看到的唯一缺点是开关本身将是标准的 iOS 开关(圆形按钮),否则,这将是最类似于 iOS 的解决方案。

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

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

【讨论】:

  • 正确。 iOS6 有 92% 的采用率(2013 年 6 月)并且还在攀升。
【解决方案4】:

看起来您只是希望您的控件只有 2 种状态 - 启用和禁用。

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

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

【讨论】:

  • 我猜也需要滑动
  • 我正在尝试复制,就像在 Twitter 的视频共享应用程序“Vine”中所做的那样。实际上,图像中显示的标题在该应用程序中平滑滑动。我想添加一个按钮来改变状态不会导致标题的平滑滚动。感谢您的回复!
  • 好的,那我猜你需要一些不同的方法。不客气。祝你好运,如果你找到了办法,请告诉我们:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多