MIT License

Powered by Appetize.io.

1 image



Customizable control based on UISwitch and UISegmentedControl written in Objective-C

DVSwitch was inspired by UISwitch and UISegmentedControl. The goals of this code are:

  • Easily customizable control with nice animations
  • Supporting pan or swipe interactions
  • Requires very little setup - images are not needed
  • Beautiful font color inversion effect - label color changes per pixel:
  • Automatic adjustment based on number of items

Slider is halfway from one item to another, notice per pixel text color change

DVSwitch *switcher = [[DVSwitch alloc] initWithStringsArray:@[@"First", @"Second"]];
switcher.frame = CGRectMake(20, 60, self.view.frame.size.width - 40, 34);
[self.view addSubview:switcher];
[switcher setPressedHandler:^(NSUInteger index) {

    NSLog(@"Did switch to index: %lu", (unsigned long)index);

[self.view addSubview:switcher];

Customizable properties:

  • UIColor *backgroundColor - color of the controls background
  • UIColor *sliderColor - color of slider
  • UIColor *labelTextColorInsideSlider - color of text when slider hovers over it
  • UIColor *labelTextColorOutsideSlider - color of text when outside of slider
  • UIFont *font - font used in control
  • CGFloat cornerRadius - corner radius of control and corner radius of slider
  • CGFLoat sliderOffset - pixel offset in points between the slider and the edge of control

When the user taps or slides the control, handler block is getting called with the index of element which was triggered. To set it use the following method:
- (void)setPressedHandler:(void (^)(NSUInteger index))handler;

Source code contains example project with few different types of switch.


iOS 7.0 and Xcode 6.0

The control might work on earlier versions, but this was not tested.


We will welcome any feedback or pull requests to the project.

Version: 1.0.0
License: MIT


Sponsored with ❤️ by Instabug

Instabug: Understand how your app is doing with real-time contextual insights from your users

Get all the logs you need and fix bugs, crashes, and other issues in minutes instead of days. With Instabug you will automatically receive device data, network logs, and reproduction steps with every bug and crash report. It only takes a line of code to integrate and is perfect for teams that are now working remotely. See more detailed features comparison and try Instabug for free here.

Get Started Now