Swift MIT

TKSwitcherCollection

An animation switch collection

T

tbxark

Dernière activité 14 sept. 2026
tbxark/TKSwitcherCollection

916

étoiles

88

forks

3

issues ouvertes

carthagecocoapodscoreanimationiosios-animationswiftswitcheruiuikitwidget

Ce README est souvent en anglais.

TKSwitcherCollection

A collection of animated switches for UIKit and SwiftUI.

English | 简体中文

iOS 13.0+ Swift 6 Swift Package Manager License MIT

Switch Example
TKSimpleSwitch
TKSimpleSwitch (rotate)
TKExchangeSwitch
TKSmileSwitch
TKLiquidSwitch

Switch designs by Oleg Frolov.

Features

  • Four animated switches: simple (with optional rotate effect), exchange, smile and liquid.
  • UIKit controls built on UIControl: target/action and @IBDesignable / @IBInspectable support.
  • SwiftUI wrappers with Binding<Bool> sharing the same animations.
  • Light / dark mode friendly when configured with semantic colors.

Requirements

  • iOS 13.0+
  • Swift 6 toolchain (Xcode 16+)

Installation

Swift Package Manager

In Xcode, select File > Add Package Dependencies... and enter the package URL:

https://github.com/TBXark/TKSwitcherCollection

Or add it to your Package.swift:

dependencies: [
    .package(url: "https://github.com/TBXark/TKSwitcherCollection.git", from: "2.0.0")
]

CocoaPods

pod 'TKSwitcherCollection', '~> 2.0'

Usage

UIKit

Every switch is a UIControl subclass. A tap toggles the switch and sends .valueChanged.

import UIKit
import TKSwitcherCollection

let switcher = TKSimpleSwitch(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
switcher.onColor = .systemGreen
switcher.rotateWhenValueChange = true

// Closure callback: fired when the user toggles, with the new value
switcher.onValueChange = { value in
    print("switch -> \(value)")
}

// Or use target/action
switcher.addTarget(self, action: #selector(handleValueChanged(_:)), for: .valueChanged)

// Programmatic changes do not fire events (same as UISwitch.setOn(_:animated:))
switcher.isOn = false            // updates immediately, no animation
switcher.setOn(true)             // animated

Available switches: TKSimpleSwitch, TKExchangeSwitch, TKSmileSwitch, TKLiquidSwitch.

SwiftUI

Every switch ships with a SwiftUI view that wraps the UIKit implementation, so the animations are identical. isOn is a regular Binding<Bool>.

import SwiftUI
import TKSwitcherCollection

struct DemoView: View {
    @State private var isOn = true

    var body: some View {
        TKSimpleSwitchView(isOn: $isOn, rotateWhenValueChange: true)
            .frame(width: 100, height: 50)
    }
}

Available views: TKSimpleSwitchView, TKExchangeSwitchView, TKSmileSwitchView, TKLiquidSwitchView.

Customization

All color / size properties are settable on both the UIKit controls and their SwiftUI wrappers:

Switch Properties
TKSimpleSwitch onColor, offColor, lineColor, circleColor, lineSize, rotateWhenValueChange
TKExchangeSwitch lineColor, onColor, offColor, lineSize
TKSmileSwitch –
TKLiquidSwitch onColor, offColor

All switches also expose isOn, animationDuration, onValueChange and setOn(_:animated:).

Demo

make demo

The demo app is generated with XcodeGen from Demo/project.yml and shows every switch in both a UIKit and a SwiftUI tab. make demo-build builds it from the command line.

License

TKSwitcherCollection is available under the MIT license. See the LICENSE file for more info.

Projets similaires

A rubber animation pagecontrol

Swiftcarthagecocoapodscoreanimation
Ttbxark
1,5 k étoiles167

A collection of awesome loading animations

Swiftanimationcarthagecocoapods
Nninjaprox
10,7 k étoiles1,2 k

A repository containing a variety of animations and Animated components created in SwiftUI that you can use in your own projects.

Swiftiosiosdevopen-source
SShubham0812
3,5 k étoiles317