2013-04-29 96 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