{"id":2769,"url":"https://github.com/WorldDownTown/RangeSeekSlider","last_synced_at":"2025-08-06T15:30:45.553Z","repository":{"id":18443828,"uuid":"84316169","full_name":"WorldDownTown/RangeSeekSlider","owner":"WorldDownTown","description":"RangeSeedSlider provides a customizable range slider like a UISlider.","archived":false,"fork":false,"pushed_at":"2023-09-07T12:22:37.000Z","size":2963,"stargazers_count":755,"open_issues_count":86,"forks_count":283,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-11-30T05:02:52.399Z","etag":null,"topics":["ios","swift","uikit","uislider","xcode"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WorldDownTown.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-03-08T12:08:30.000Z","updated_at":"2024-11-26T03:24:58.000Z","dependencies_parsed_at":"2024-01-05T20:20:32.969Z","dependency_job_id":"cbb192ce-5a19-4721-baaa-eb53dfaab641","html_url":"https://github.com/WorldDownTown/RangeSeekSlider","commit_stats":{"total_commits":44,"total_committers":8,"mean_commits":5.5,"dds":"0.20454545454545459","last_synced_commit":"df4c893937f924dbcf0b2ca1424ea8a7360b09e2"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WorldDownTown%2FRangeSeekSlider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WorldDownTown%2FRangeSeekSlider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WorldDownTown%2FRangeSeekSlider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WorldDownTown%2FRangeSeekSlider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WorldDownTown","download_url":"https://codeload.github.com/WorldDownTown/RangeSeekSlider/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228915462,"owners_count":17991409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","swift","uikit","uislider","xcode"],"created_at":"2024-01-05T20:16:22.355Z","updated_at":"2024-12-09T15:30:52.865Z","avatar_url":"https://github.com/WorldDownTown.png","language":"Swift","funding_links":[],"categories":["UI","Libs","UI [🔝](#readme)","OOM-Leaks-Crash"],"sub_categories":["Slider","UI","Other free courses"],"readme":"# RangeSeekSlider\n\n[![Join the chat at https://gitter.im/WorldDownTown/RangeSeekSlider](https://badges.gitter.im/WorldDownTown/RangeSeekSlider.svg)](https://gitter.im/WorldDownTown/RangeSeekSlider?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n[![License](https://img.shields.io/:license-mit-blue.svg)](https://doge.mit-license.org)\n[![Language](https://img.shields.io/badge/language-swift-orange.svg?style=flat)](https://developer.apple.com/swift)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![CocoaPods compatible](https://img.shields.io/cocoapods/v/RangeSeekSlider.svg?style=flat)](http://cocoadocs.org/docsets/RangeSeekSlider/)\n[![Downloads with CocoaPods](https://img.shields.io/cocoapods/dt/RangeSeekSlider.svg)](http://cocoadocs.org/docsets/RangeSeekSlider/)\n[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/matteocrippa/awesome-swift#ui)\n\n## Overview\n`RangeSeekSlider` provides a customizable range slider like a UISlider.\nThis library is based on [TomThorpe/TTRangeSlider](https://github.com/TomThorpe/TTRangeSlider) (Objective-C) and made with Swift.\n\n![demo](images/demo.gif)\n\n## Demo\nYou can try on [Appetize.io](https://appetize.io/app/v3pzcncpffgth3qqe1v8a1ktg4)\n\nor\n\nBuild Xcode project.\n\n1. Open RangeSeekSlider.xcodeproj.\n2. Change Scheme to `RangeSeekSliderDemo`\n3. Run\n\n## Usage\nAdd the RangeSeekSlider like you would with any other UIControl. Either:\n- Add a view in your storyboard/xib and change its `Class` and `Module` to `RangeSeekSlider`.  You can set all the properties in the Attributes Inspector and see a live preview:\n\n![Interface Builder Module Screenshot](images/interface_builder_module.png)\n\n![Interface Builder Screenshot](images/interface_builder.png)\n\nor\n\n- Create the `RangeSeekSlider` in code using `RangeSeekSlider()` then add it as a subview to your code and set the relevant autolayout properties or frame.\n\nThe default slider ranges from 0.0 -\u003e 100.0 and has 10.0 preselected as the minimum, and 90.0 as the maximum.\n\nValues that the user has selected are exposed using the `selectedMinValue` and `selectedMaxValue` properties. You can also use these properties to change the selected values programatically if you wish.\n\nOther customisation of the control is done using the following properties:\n\n#### `tintColor`\nThe tintColor property (which you can also set in Interface Builder) sets the overall color of the control, including the color of the line, the two handles, and the labels.\n\nIt is safe to change the `tintColor` at any time, if the control is currently visible the color change will be animated into the new color.\n\n#### `minValue`\nThe minimum possible value to select in the range\n\n#### `maxValue`\nThe maximum possible value to select in the range\n\n#### `selectedMinValue`\nThe preselected minumum value (note: This should be less than the selectedMaxValue)\n\n#### `selectedMaxValue`\nThe preselected maximum value (note: This should be greater than the selectedMinValue)\n\n#### `minLabelFont`\nThe font of the minimum value text label. If not set, the default is system font size `12.0`.\n\n#### `maxLabelFont`\nThe font of the maximum value text label. If not set, the default is system font size `12.0`.\n\n#### `numberFormatter`\nEach handle in the slider has a label above it showing the current selected value. If you change number format, update each properties of `NumberFormatter`. By default, this is displayed as a decimal format.\n\n#### `hideLabels`\nWhen set to `true` the labels above the slider controls will be hidden. Default is `false`.\n\n#### `labelsFixed`\nFixes the labels above the slider controls. If `true`, labels will be fixed to both ends. Otherwise labels will move with the handles. Default is `false`.\n\n#### `minDistance`\nThe minimum distance the two selected slider values must be apart. Default is `0.0`.\n\n#### `maxDistance`\nThe maximum distance the two selected slider values must be apart. Default is `CGFloat.greatestFiniteMagnitude`.\n\n#### `minLabelColor`\nThe color of the minimum value text label. If not set, the default is the tintColor.\n\n#### `maxLabelColor`\nThe color of the maximum value text label. If not set, the default is the tintColor.\n\n#### `handleColor`\nIf set it will update the color of the handles. Default is `tintColor`.\n\n#### `colorBetweenHandles`\nThe colorBetweenHandles property sets the color of the line between the two handles.\n\n#### `handleBorderColor`\nIf set it will update the color of the handle borders. Default is `tintColor`.\n\n### `initialColor`\nThe color of the entire slider when the handle is set to the minimum value and the maximum value. Default is nil.\n\n#### `disableRange`\nIf `true`, the control will mimic a normal slider and have only one handle rather than a range.\n\nIn this case, the selectedMinValue will be not functional anymore. Use selectedMaxValue instead to determine the value the user has selected.\n\n#### `enableStep`\nIf `true` the control will snap to point at each `step` (property) between minValue and maxValue. Default value is disabled.\n\n#### `step`\nIf `enableStep` is `true`, this controls the value of each step. E.g. if this value is 20, the control will snap to values 20,40,60...etc. Set this is you enable the `enableStep` property.\n\n#### `handleImage`\nIf set the image passed will be used for the handles.\n\n#### `handleDiameter`\nIf set it will update the size of the handles. Default is `16.0`.\n\n#### `selectedHandleDiameterMultiplier`\nIf set it update the scaling factor of the handle when selected. Default is `1.7`. If you don't want any scaling, set it to `1.0`.\n\n#### `lineHeight`\nSet the height of the line. It will automatically round the corners. If not specified, the default value will be `1.0`.\n\n#### `handleBorderWidth`\nIf set it will update the size of the handle borders. Default is `0.0`\n\n#### `labelPadding`\nIf set it will update the size of the padding between label and handle. Default is `8.0`\n\n#### `minLabelAccessibilityLabel`\nThe label displayed in accessibility mode for minimum value handler. If not set, the default is empty String.\n\n#### `maxLabelAccessibilityLabel`\nThe label displayed in accessibility mode for maximum value handler. If not set, the default is empty String.\n\n#### `minLabelAccessibilityHint`\nThe brief description displayed in accessibility mode for minimum value handler. If not set, the default is empty String.\n\n#### `maxLabelAccessibilityHint`\nThe brief description displayed in accessibility mode for maximum value handler. If not set, the default is empty String.\n\n#### `func setupStyle()`\nWhen subclassing `RangeSeekSlider` and setting each item in `setupStyle()`, the design is reflected in Interface Builder as well.\n![setup_style.gif](images/setup_style.gif)\n\n## Requirements\n- Swift 3.0+\n- iOS 9.0+\n\n## Installation\n\n### Carthage\nRangeSeekSlider is available through [Carthage](https://github.com/Carthage/Carthage). To install it, simply add the following line to your Cartfile:\n\n```\ngithub \"WorldDownTown/RangeSeekSlider\"\n```\n\n#### ⚠️Warning⚠️\nWhen installed with Carthage, `@IBDesignable` can't be available ([Carthage Issue](https://github.com/Carthage/Carthage/issues/335)). But we have a workaround is shown in [Stack Overflow](http://stackoverflow.com/a/37631860/1835227). It is able to use `@IBDesignable` by subclassing `RangeSeekSlider`.\n\n```swift\n@IBDesignable class CustomRangeSeekSlider: RangeSeekSlider {}\n```\n\n\n### CocoaPods\nRangeSeekSlider is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your Podfile:\n\n```ruby\npod 'RangeSeekSlider'\n```\n\n### Manually\nDownload and drop `RangeSeekSlider/Sources` folder in your project.\n\n## Author\nWorldDownTown, WorldDownTown@gmail.com\n\n## License\nRangeSeekSlider is available under the MIT license. See the LICENSE file for more info.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWorldDownTown%2FRangeSeekSlider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FWorldDownTown%2FRangeSeekSlider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWorldDownTown%2FRangeSeekSlider/lists"}