├── .swift-version ├── demo.gif ├── Example ├── Example.xcodeproj │ ├── xcuserdata │ │ └── george.xcuserdatad │ │ │ ├── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ │ └── xcschemes │ │ │ ├── xcschememanagement.plist │ │ │ └── Example.xcscheme │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── george.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── project.pbxproj ├── Example │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ ├── ViewController.swift │ └── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard └── ExampleTests │ ├── Info.plist │ └── ExampleTests.swift ├── LICENSE ├── MaterialColorPicker.podspec ├── README.md └── Source ├── MaterialColorPicker.swift ├── GMPalette.swift └── GMColor.swift /.swift-version: -------------------------------------------------------------------------------- 1 | 3.0 2 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gkye/MaterialColorPicker/HEAD/demo.gif -------------------------------------------------------------------------------- /Example/Example.xcodeproj/xcuserdata/george.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/xcuserdata/george.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gkye/MaterialColorPicker/HEAD/Example/Example.xcodeproj/project.xcworkspace/xcuserdata/george.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Example/Example/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Example 4 | // 5 | // Created by George on 2016-06-09. 6 | // Copyright © 2016 George Kye. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | } 23 | 24 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/xcuserdata/george.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Example.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 5E560B7B1D0A288000F065B5 16 | 17 | primary 18 | 19 | 20 | 5E560B8F1D0A288200F065B5 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /Example/ExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 = George Kye 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /MaterialColorPicker.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint MaterialColorPicker.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'MaterialColorPicker' 11 | s.version = '0.2.0' 12 | s.summary = 'Drop in customizable color picker with material color support.' 13 | 14 | 15 | s.description = 'Customizable color picker with material color support.' 16 | 17 | s.homepage = 'https://github.com/gkye/MaterialColorPicker.git' 18 | s.license = { :type => 'MIT', :file => 'LICENSE' } 19 | s.author = { '=' => 'qwstnz@gmail.com' } 20 | s.source = { :git => 'https://github.com/gkye/MaterialColorPicker.git', :tag => s.version.to_s } 21 | s.social_media_url = 'https://twitter.com/kyegeorge' 22 | 23 | s.ios.deployment_target = '8.0' 24 | 25 | s.source_files = 'Source/**/*' 26 | s.frameworks = 'UIKit' 27 | 28 | end 29 | -------------------------------------------------------------------------------- /Example/ExampleTests/ExampleTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleTests.swift 3 | // ExampleTests 4 | // 5 | // Created by George on 2016-06-09. 6 | // Copyright © 2016 George Kye. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import Example 11 | 12 | class ExampleTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Example/Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Example/Example/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Example 4 | // 5 | // Created by George on 2016-06-09. 6 | // Copyright © 2016 George Kye. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | class ViewController: UIViewController, MaterialColorPickerDelegate { 13 | 14 | var pickerView: MaterialColorPicker! 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | pickerView = MaterialColorPicker(frame: CGRect(x: 0, y: 20, width: self.view.frame.width, height: 60)) 19 | self.view.addSubview(pickerView) 20 | pickerView.delegate = self 21 | pickerView.shuffleColors = true 22 | pickerView.selectionColor = UIColor.cyan 23 | pickerView.selectedBorderWidth = 5 24 | pickerView.cellSpacing = 10 25 | 26 | } 27 | 28 | func didSelectColorAtIndex(_ MaterialColorPickerView: MaterialColorPicker, index: Int, color: UIColor) { 29 | print("Index is ", index) 30 | self.view.backgroundColor = color 31 | } 32 | 33 | func sizeForCellAtIndex(_ MaterialColorPickerView: MaterialColorPicker, index: Int) -> CGSize { 34 | if index == 3{ 35 | return CGSize(width: 50, height: 50) 36 | }else{ 37 | return CGSize(width: 50, height: 50) 38 | } 39 | } 40 | 41 | 42 | @IBAction func selectIndex(_ sender: UIButton){ 43 | pickerView.selectCellAtIndex(30) 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /Example/Example/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Example/Example/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MaterialColorPicker 2 | 3 | [![codebeat badge](https://codebeat.co/badges/2ca55682-c811-43ce-8142-f90d4cf29375)](https://codebeat.co/projects/github-com-gkye-materialcolorpicker) 4 | [![Version](https://img.shields.io/cocoapods/v/MaterialColorPicker.svg?style=flat)](http://cocoapods.org/pods/MaterialColorPicker) 5 | [![License](https://img.shields.io/cocoapods/l/MaterialColorPicker.svg?style=flat)](http://cocoapods.org/pods/MaterialColorPicker) 6 | [![Platform](https://img.shields.io/cocoapods/p/MaterialColorPicker.svg?style=flat)](http://cocoapods.org/pods/MaterialColorPicker) 7 | 8 | ![Demo Gif](https://rawgit.com/gkye/MaterialColorPicker/master/demo.gif) 9 | 10 | ## Installation 11 | 12 | MaterialColorPicker is available through [CocoaPods](http://cocoapods.org). To install 13 | it, simply add the following line to your Podfile: 14 | 15 | ```ruby 16 | pod "MaterialColorPicker" 17 | ``` 18 | 19 | # Usage 20 | 21 | #### Delegate 22 | ```swift 23 | func didSelectColorAtIndex(view: UIView, index: Int, color: UIColor) 24 | ``` 25 | Returns the index and color of the selected item. 26 | 27 | ```swift 28 | func sizeForCellAtIndex(MaterialColorPickerView: MaterialColorPicker, index: Int)->CGSize 29 | ``` 30 | Set size of cell at a spefic index 31 | #### DataSource 32 | 33 | ```swift 34 | func colors()->[UIColor] 35 | ``` 36 | Set colors for MaterialColorPicker (Default colors will be used if no `dataSource` set) 37 | google-material-color-swift by katopz included in project 38 | 39 | #### Properties 40 | ```swift 41 | public var shuffleColors: Bool = false //Shuffles colors within ColorPicker 42 | ``` 43 | ```swift 44 | public func selectCellAtIndex(index: Int) 45 | ``` 46 | Programtically select a cell at an index 47 | 48 | ## Author 49 | 50 | George Kye 51 | 52 | ## License 53 | 54 | MaterialColorPicker is available under the MIT license. See the LICENSE file for more info. 55 | 56 | # Change Log 57 | 0.2.0 58 | - Updated project to support swift3 59 | - Updated demo project to reflect changes 60 | 61 | 0.1.8 62 | * Added public selectionColor property. 63 | * Added selectedBorderWidth property. 64 | * Added cellSpacing property. 65 | 66 | 67 | 0.1.6 68 | - Added `selectCellAtIndex` function and `sizeForCellAtIndex` delegate 69 | 70 | 0.1.5 71 | - Added `itemSize` public property to allow configuration of color picker cell. 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/xcuserdata/george.xcuserdatad/xcschemes/Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Source/MaterialColorPicker.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MaterialColorPicker.swift 3 | // MaterialColorPicker 4 | // 5 | // Created by George Kye on 2016-06-09. 6 | // Copyright © 2016 George Kye. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | private class MaterialColorPickerCell: UICollectionViewCell{ 13 | 14 | func setup(){ 15 | self.layer.cornerRadius = self.bounds.width / 2 16 | } 17 | 18 | //MARK: - Lifecycle 19 | 20 | init() { 21 | super.init(frame: CGRect.zero) 22 | setup() 23 | } 24 | 25 | override init(frame: CGRect) { 26 | super.init(frame: frame) 27 | setup() 28 | } 29 | 30 | required init?(coder aDecoder: NSCoder) { 31 | fatalError("init(coder:) has not been implemented") 32 | } 33 | } 34 | 35 | 36 | @objc public protocol MaterialColorPickerDataSource { 37 | /** 38 | Set colors for MaterialColorPicker (optional. Default colors will be used if nil) 39 | - returns: should return an array of `UIColor` 40 | */ 41 | func colors()->[UIColor] 42 | } 43 | 44 | 45 | @objc public protocol MaterialColorPickerDelegate{ 46 | /** 47 | Return selected index and color for index 48 | - parameter index: index of selected item 49 | - parameter color: background color of selected item 50 | */ 51 | func didSelectColorAtIndex(_ materialColorPickerView: MaterialColorPicker, index: Int, color: UIColor) 52 | 53 | /** 54 | Return a size for the current cell (overrides default size) 55 | - parameter MaterialColorPickerView: current MaterialColorPicker instantse 56 | - parameter index: index of cell 57 | - returns: CGSize 58 | */ 59 | @objc optional func sizeForCellAtIndex(_ materialColorPickerView: MaterialColorPicker, index: Int)->CGSize 60 | } 61 | 62 | open class MaterialColorPicker: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout{ 63 | 64 | fileprivate var selectedIndex: IndexPath? 65 | lazy var colors: [UIColor] = { 66 | let colors = GMPalette.allColors() 67 | return colors 68 | }() 69 | 70 | open var dataSource: MaterialColorPickerDataSource?{ 71 | didSet{ 72 | if let dsColors = dataSource?.colors(){ 73 | self.colors = dsColors 74 | } 75 | } 76 | } 77 | 78 | open var delegate: MaterialColorPickerDelegate? 79 | 80 | /// Shuffles colors within ColorPicker 81 | open var shuffleColors: Bool = false{ 82 | didSet{ 83 | if shuffleColors{ colors.shuffle() } 84 | } 85 | } 86 | 87 | /// Color for border of selected cell 88 | open var selectionColor: UIColor = UIColor.black 89 | 90 | /// Border width for selected Cell 91 | open var selectedBorderWidth: CGFloat = 2 92 | 93 | /// Set spacing between cells 94 | open var cellSpacing: CGFloat = 2 95 | 96 | //Setup collectionview and flow layout 97 | lazy var collectionView: UICollectionView = { 98 | let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout() 99 | layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 100 | layout.itemSize = CGSize(width: self.bounds.height, height: self.bounds.height) 101 | layout.minimumInteritemSpacing = 1 102 | layout.minimumLineSpacing = 1 103 | layout.scrollDirection = .horizontal 104 | let collectionView = UICollectionView(frame: self.frame, collectionViewLayout: layout) 105 | collectionView.dataSource = self 106 | collectionView.delegate = self 107 | collectionView.register(MaterialColorPickerCell.self, forCellWithReuseIdentifier: "Cell") 108 | collectionView.backgroundColor = UIColor.clear 109 | collectionView.showsVerticalScrollIndicator = false 110 | collectionView.showsHorizontalScrollIndicator = false 111 | return collectionView 112 | }() 113 | 114 | open override func layoutSubviews() { 115 | super.layoutSubviews() 116 | initialize() 117 | addContrains(self, subView: collectionView) 118 | } 119 | 120 | fileprivate func initialize() { 121 | collectionView.removeFromSuperview() 122 | self.addSubview(self.collectionView) 123 | } 124 | 125 | //Select index programtically 126 | open func selectCellAtIndex(_ index: Int){ 127 | let indexPath = IndexPath(row: index, section: 0) 128 | selectedIndex = indexPath 129 | collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally) 130 | self.delegate?.didSelectColorAtIndex(self, index: (self.selectedIndex! as NSIndexPath).item, color: colors[index]) 131 | animateCell(manualSelection: true) 132 | } 133 | 134 | //MARK: CollectionView DataSouce 135 | open func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 136 | return colors.count 137 | } 138 | 139 | open func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 140 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! MaterialColorPickerCell 141 | cell.layer.masksToBounds = true 142 | cell.clipsToBounds = true 143 | 144 | cell.backgroundColor = colors[(indexPath as NSIndexPath).item] 145 | if indexPath == selectedIndex { 146 | cell.layer.borderWidth = selectedBorderWidth 147 | cell.layer.borderColor = selectionColor.cgColor 148 | }else{ 149 | cell.layer.borderWidth = 0 150 | cell.layer.borderColor = UIColor.clear.cgColor 151 | } 152 | return cell 153 | } 154 | 155 | //MARK: CollectionView delegate 156 | 157 | open func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 158 | selectedIndex = indexPath 159 | animateCell() 160 | } 161 | 162 | open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 163 | if let size = delegate?.sizeForCellAtIndex?(self, index: (indexPath as NSIndexPath).row){ 164 | return size 165 | } 166 | 167 | return CGSize(width: self.bounds.height, height: self.bounds.height - 1) 168 | } 169 | 170 | 171 | open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 172 | return cellSpacing 173 | } 174 | 175 | 176 | 177 | /** 178 | Animate cell on selection 179 | */ 180 | fileprivate func animateCell(manualSelection: Bool = false){ 181 | if let cell = collectionView.cellForItem(at: selectedIndex!){ 182 | UIView.animate(withDuration: 0.3 / 1.5, animations: {() -> Void in 183 | cell.transform = CGAffineTransform.identity.scaledBy(x: 1.3, y: 1.3) 184 | }, completion: {(finished: Bool) -> Void in 185 | UIView.animate(withDuration: 0.3 / 2, animations: {() -> Void in 186 | cell.transform = CGAffineTransform.identity.scaledBy(x: 0.9, y: 0.9) 187 | }, completion: {(finished: Bool) -> Void in 188 | UIView.animate(withDuration: 0.3 / 2, animations: {() -> Void in 189 | cell.transform = CGAffineTransform.identity 190 | if !manualSelection{ 191 | self.delegate?.didSelectColorAtIndex(self, index: (self.selectedIndex! as NSIndexPath).item, color: cell.backgroundColor!) 192 | } 193 | self.collectionView.reloadData() 194 | }) 195 | }) 196 | }) 197 | } 198 | } 199 | 200 | fileprivate func addContrains(_ superView: UIView, subView: UIView){ 201 | subView.translatesAutoresizingMaskIntoConstraints = false 202 | let views = ["myView" : subView] 203 | superView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[myView]|", options:[] , metrics: nil, views: views)) 204 | superView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[myView]|", options:[] , metrics: nil, views: views)) 205 | } 206 | } 207 | 208 | 209 | //Shuffle extension 210 | 211 | extension MutableCollection where Index == Int { 212 | /// Shuffle the elements of `self` in-place. 213 | mutating func shuffle() { 214 | // empty and single-element collections don't shuffle 215 | if count < 2 { return } 216 | 217 | for i in startIndex ..< endIndex - 1 { 218 | let j = Int(arc4random_uniform(UInt32(endIndex - i))) + i 219 | if i != j { 220 | swap(&self[i], &self[j]) 221 | } 222 | } 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /Source/GMPalette.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GMPalette.swift 3 | // GMColor 4 | // 5 | // Created by Todsaporn Banjerdkit (katopz) on 12/22/14. 6 | // Copyright (c) 2014 Debokeh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public struct GMPalette { 12 | 13 | public static func MaterialPickerColors() -> [UIColor] { 14 | return [ 15 | GMColor.redA700Color(), GMColor.pinkA700Color(), GMColor.pink50Color(), 16 | GMColor.purple50Color(), GMColor.deepPurpleA700Color(), GMColor.indigoA700Color(), 17 | GMColor.blue50Color(), GMColor.lightBlueA700Color(), GMColor.cyanA700Color(), 18 | GMColor.tealA700Color(), GMColor.greenA700Color(), GMColor.lightGreenA700Color(), 19 | GMColor.limeA700Color(), GMColor.yellowA700Color(), GMColor.yellowA700Color(), 20 | GMColor.amberA700Color(), GMColor.orangeA700Color(), GMColor.grey500Color(), 21 | GMColor.blueGrey300Color() 22 | ] 23 | } 24 | static func all() -> [[UIColor]] { 25 | return [red(), pink(), purple(), 26 | deepPurple(), indigo(), blue(), 27 | lightBlue(), cyan(), teal(), 28 | green(), lightGreen(), lime(), 29 | yellow(), amber(), orange(), 30 | deepOrange(), brown(), grey(), 31 | blueGrey(), blackAndWhite() 32 | ] 33 | } 34 | 35 | public static func allColors()->[UIColor]{ 36 | var colors = [UIColor]() 37 | for c in all(){ 38 | c.forEach{ 39 | colors.append($0) 40 | } 41 | } 42 | return colors 43 | } 44 | 45 | public static func red() -> [UIColor] { 46 | return [GMColor.red50Color(), GMColor.red100Color(), 47 | GMColor.red200Color(), GMColor.red300Color(), 48 | GMColor.red400Color(), GMColor.red500Color(), 49 | GMColor.red600Color(), GMColor.red700Color(), 50 | GMColor.red800Color(), GMColor.red900Color(), 51 | GMColor.redA100Color(), GMColor.redA200Color(), 52 | GMColor.redA400Color(), GMColor.redA700Color() 53 | ] 54 | } 55 | 56 | public static func pink() -> [UIColor] { 57 | return [GMColor.pink50Color(), GMColor.pink100Color(), 58 | GMColor.pink200Color(), GMColor.pink300Color(), 59 | GMColor.pink400Color(), GMColor.pink500Color(), 60 | GMColor.pink600Color(), GMColor.pink700Color(), 61 | GMColor.pink800Color(), GMColor.pink900Color(), 62 | GMColor.pinkA100Color(), GMColor.pinkA200Color(), 63 | GMColor.pinkA400Color(), GMColor.pinkA700Color() 64 | ] 65 | } 66 | 67 | public static func purple() -> [UIColor] { 68 | return [GMColor.purple50Color(), GMColor.purple100Color(), 69 | GMColor.purple200Color(), GMColor.purple300Color(), 70 | GMColor.purple400Color(), GMColor.purple500Color(), 71 | GMColor.purple600Color(), GMColor.purple700Color(), 72 | GMColor.purple800Color(), GMColor.purple900Color(), 73 | GMColor.purpleA100Color(), GMColor.purpleA200Color(), 74 | GMColor.purpleA400Color(), GMColor.purpleA700Color() 75 | ] 76 | } 77 | 78 | public static func deepPurple() -> [UIColor] { 79 | return [GMColor.deepPurple50Color(), GMColor.deepPurple100Color(), 80 | GMColor.deepPurple200Color(), GMColor.deepPurple300Color(), 81 | GMColor.deepPurple400Color(), GMColor.deepPurple500Color(), 82 | GMColor.deepPurple600Color(), GMColor.deepPurple700Color(), 83 | GMColor.deepPurple800Color(), GMColor.deepPurple900Color(), 84 | GMColor.deepPurpleA100Color(), GMColor.deepPurpleA200Color(), 85 | GMColor.deepPurpleA400Color(), GMColor.deepPurpleA700Color() 86 | ] 87 | } 88 | 89 | public static func indigo() -> [UIColor] { 90 | return [GMColor.indigo50Color(), GMColor.indigo100Color(), 91 | GMColor.indigo200Color(), GMColor.indigo300Color(), 92 | GMColor.indigo400Color(), GMColor.indigo500Color(), 93 | GMColor.indigo600Color(), GMColor.indigo700Color(), 94 | GMColor.indigo800Color(), GMColor.indigo900Color(), 95 | GMColor.indigoA100Color(), GMColor.indigoA200Color(), 96 | GMColor.indigoA400Color(), GMColor.indigoA700Color() 97 | ] 98 | } 99 | 100 | public static func blue() -> [UIColor] { 101 | return [GMColor.blue50Color(), GMColor.blue100Color(), 102 | GMColor.blue200Color(), GMColor.blue300Color(), 103 | GMColor.blue400Color(), GMColor.blue500Color(), 104 | GMColor.blue600Color(), GMColor.blue700Color(), 105 | GMColor.blue800Color(), GMColor.blue900Color(), 106 | GMColor.blueA100Color(), GMColor.blueA200Color(), 107 | GMColor.blueA400Color(), GMColor.blueA700Color() 108 | ] 109 | } 110 | 111 | public static func lightBlue() -> [UIColor] { 112 | return [GMColor.lightBlue50Color(), GMColor.lightBlue100Color(), 113 | GMColor.lightBlue200Color(), GMColor.lightBlue300Color(), 114 | GMColor.lightBlue400Color(), GMColor.lightBlue500Color(), 115 | GMColor.lightBlue600Color(), GMColor.lightBlue700Color(), 116 | GMColor.lightBlue800Color(), GMColor.lightBlue900Color(), 117 | GMColor.lightBlueA100Color(), GMColor.lightBlueA200Color(), 118 | GMColor.lightBlueA400Color(), GMColor.lightBlueA700Color() 119 | ] 120 | } 121 | 122 | public static func cyan() -> [UIColor] { 123 | return [GMColor.cyan50Color(), GMColor.cyan100Color(), 124 | GMColor.cyan200Color(), GMColor.cyan300Color(), 125 | GMColor.cyan400Color(), GMColor.cyan500Color(), 126 | GMColor.cyan600Color(), GMColor.cyan700Color(), 127 | GMColor.cyan800Color(), GMColor.cyan900Color(), 128 | GMColor.cyanA100Color(), GMColor.cyanA200Color(), 129 | GMColor.cyanA400Color(), GMColor.cyanA700Color() 130 | ] 131 | } 132 | 133 | 134 | public static func teal() -> [UIColor] { 135 | return [GMColor.teal50Color(), GMColor.teal100Color(), 136 | GMColor.teal200Color(), GMColor.teal300Color(), 137 | GMColor.teal400Color(), GMColor.teal500Color(), 138 | GMColor.teal600Color(), GMColor.teal700Color(), 139 | GMColor.teal800Color(), GMColor.teal900Color(), 140 | GMColor.tealA100Color(), GMColor.tealA200Color(), 141 | GMColor.tealA400Color(), GMColor.tealA700Color() 142 | ] 143 | } 144 | 145 | public static func green() -> [UIColor] { 146 | return [GMColor.green50Color(), GMColor.green100Color(), 147 | GMColor.green200Color(), GMColor.green300Color(), 148 | GMColor.green400Color(), GMColor.green500Color(), 149 | GMColor.green600Color(), GMColor.green700Color(), 150 | GMColor.green800Color(), GMColor.green900Color(), 151 | GMColor.greenA100Color(), GMColor.greenA200Color(), 152 | GMColor.greenA400Color(), GMColor.greenA700Color() 153 | ] 154 | } 155 | 156 | public static func lightGreen() -> [UIColor] { 157 | return [GMColor.lightGreen50Color(), GMColor.lightGreen100Color(), 158 | GMColor.lightGreen200Color(), GMColor.lightGreen300Color(), 159 | GMColor.lightGreen400Color(), GMColor.lightGreen500Color(), 160 | GMColor.lightGreen600Color(), GMColor.lightGreen700Color(), 161 | GMColor.lightGreen800Color(), GMColor.lightGreen900Color(), 162 | GMColor.lightGreenA100Color(), GMColor.lightGreenA200Color(), 163 | GMColor.lightGreenA400Color(), GMColor.lightGreenA700Color() 164 | ] 165 | } 166 | 167 | public static func lime() -> [UIColor] { 168 | return [GMColor.lime50Color(), GMColor.lime100Color(), 169 | GMColor.lime200Color(), GMColor.lime300Color(), 170 | GMColor.lime400Color(), GMColor.lime500Color(), 171 | GMColor.lime600Color(), GMColor.lime700Color(), 172 | GMColor.lime800Color(), GMColor.lime900Color(), 173 | GMColor.limeA100Color(), GMColor.limeA200Color(), 174 | GMColor.limeA400Color(), GMColor.limeA700Color() 175 | ] 176 | } 177 | 178 | public static func yellow() -> [UIColor] { 179 | return [GMColor.yellow50Color(), GMColor.yellow100Color(), 180 | GMColor.yellow200Color(), GMColor.yellow300Color(), 181 | GMColor.yellow400Color(), GMColor.yellow500Color(), 182 | GMColor.yellow600Color(), GMColor.yellow700Color(), 183 | GMColor.yellow800Color(), GMColor.yellow900Color(), 184 | GMColor.yellowA100Color(), GMColor.yellowA200Color(), 185 | GMColor.yellowA400Color(), GMColor.yellowA700Color() 186 | ] 187 | } 188 | 189 | public static func amber() -> [UIColor] { 190 | return [GMColor.amber50Color(), GMColor.amber100Color(), 191 | GMColor.amber200Color(), GMColor.amber300Color(), 192 | GMColor.amber400Color(), GMColor.amber500Color(), 193 | GMColor.amber600Color(), GMColor.amber700Color(), 194 | GMColor.amber800Color(), GMColor.amber900Color(), 195 | GMColor.amberA100Color(), GMColor.amberA200Color(), 196 | GMColor.amberA400Color(), GMColor.amberA700Color() 197 | ] 198 | } 199 | 200 | public static func orange() -> [UIColor] { 201 | return [GMColor.orange50Color(), GMColor.orange100Color(), 202 | GMColor.orange200Color(), GMColor.orange300Color(), 203 | GMColor.orange400Color(), GMColor.orange500Color(), 204 | GMColor.orange600Color(), GMColor.orange700Color(), 205 | GMColor.orange800Color(), GMColor.orange900Color(), 206 | GMColor.orangeA100Color(), GMColor.orangeA200Color(), 207 | GMColor.orangeA400Color(), GMColor.orangeA700Color() 208 | ] 209 | } 210 | 211 | public static func deepOrange() -> [UIColor] { 212 | return [GMColor.deepOrange50Color(), GMColor.deepOrange100Color(), 213 | GMColor.deepOrange200Color(), GMColor.deepOrange300Color(), 214 | GMColor.deepOrange400Color(), GMColor.deepOrange500Color(), 215 | GMColor.deepOrange600Color(), GMColor.deepOrange700Color(), 216 | GMColor.deepOrange800Color(), GMColor.deepOrange900Color(), 217 | GMColor.deepOrangeA100Color(), GMColor.deepOrangeA200Color(), 218 | GMColor.deepOrangeA400Color(), GMColor.deepOrangeA700Color() 219 | ] 220 | } 221 | 222 | public static func brown() -> [UIColor] { 223 | return [GMColor.brown50Color(), GMColor.brown100Color(), 224 | GMColor.brown200Color(), GMColor.brown300Color(), 225 | GMColor.brown400Color(), GMColor.brown500Color(), 226 | GMColor.brown600Color(), GMColor.brown700Color(), 227 | GMColor.brown800Color(), GMColor.brown900Color() 228 | ] 229 | } 230 | 231 | public static func grey() -> [UIColor] { 232 | return [GMColor.grey50Color(), GMColor.grey100Color(), 233 | GMColor.grey200Color(), GMColor.grey300Color(), 234 | GMColor.grey400Color(), GMColor.grey500Color(), 235 | GMColor.grey600Color(), GMColor.grey700Color(), 236 | GMColor.grey800Color(), GMColor.grey900Color() 237 | ] 238 | } 239 | 240 | public static func blueGrey() -> [UIColor] { 241 | return [GMColor.blueGrey50Color(), GMColor.blueGrey100Color(), 242 | GMColor.blueGrey200Color(), GMColor.blueGrey300Color(), 243 | GMColor.blueGrey400Color(), GMColor.blueGrey500Color(), 244 | GMColor.blueGrey600Color(), GMColor.blueGrey700Color(), 245 | GMColor.blueGrey800Color(), GMColor.blueGrey900Color() 246 | ] 247 | } 248 | 249 | public static func blackAndWhite() -> [UIColor] { 250 | return [GMColor.blackColor(), GMColor.whiteColor()] 251 | } 252 | } -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5E560B801D0A288100F065B5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E560B7F1D0A288100F065B5 /* AppDelegate.swift */; }; 11 | 5E560B821D0A288100F065B5 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E560B811D0A288100F065B5 /* ViewController.swift */; }; 12 | 5E560B851D0A288100F065B5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5E560B831D0A288100F065B5 /* Main.storyboard */; }; 13 | 5E560B871D0A288100F065B5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5E560B861D0A288100F065B5 /* Assets.xcassets */; }; 14 | 5E560B8A1D0A288100F065B5 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5E560B881D0A288100F065B5 /* LaunchScreen.storyboard */; }; 15 | 5E560B951D0A288200F065B5 /* ExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E560B941D0A288200F065B5 /* ExampleTests.swift */; }; 16 | 5E560BAA1D0A291300F065B5 /* GMColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E560BA71D0A291300F065B5 /* GMColor.swift */; }; 17 | 5E560BAB1D0A291300F065B5 /* GMPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E560BA81D0A291300F065B5 /* GMPalette.swift */; }; 18 | 5E560BAC1D0A291300F065B5 /* MaterialColorPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E560BA91D0A291300F065B5 /* MaterialColorPicker.swift */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 5E560B911D0A288200F065B5 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = 5E560B741D0A288000F065B5 /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = 5E560B7B1D0A288000F065B5; 27 | remoteInfo = Example; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 5E560B7C1D0A288000F065B5 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | 5E560B7F1D0A288100F065B5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 34 | 5E560B811D0A288100F065B5 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 35 | 5E560B841D0A288100F065B5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 36 | 5E560B861D0A288100F065B5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 37 | 5E560B891D0A288100F065B5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 38 | 5E560B8B1D0A288100F065B5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 39 | 5E560B901D0A288200F065B5 /* ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | 5E560B941D0A288200F065B5 /* ExampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleTests.swift; sourceTree = ""; }; 41 | 5E560B961D0A288200F065B5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42 | 5E560BA71D0A291300F065B5 /* GMColor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GMColor.swift; sourceTree = ""; }; 43 | 5E560BA81D0A291300F065B5 /* GMPalette.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GMPalette.swift; sourceTree = ""; }; 44 | 5E560BA91D0A291300F065B5 /* MaterialColorPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaterialColorPicker.swift; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 5E560B791D0A288000F065B5 /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | 5E560B8D1D0A288200F065B5 /* Frameworks */ = { 56 | isa = PBXFrameworksBuildPhase; 57 | buildActionMask = 2147483647; 58 | files = ( 59 | ); 60 | runOnlyForDeploymentPostprocessing = 0; 61 | }; 62 | /* End PBXFrameworksBuildPhase section */ 63 | 64 | /* Begin PBXGroup section */ 65 | 5E560B731D0A288000F065B5 = { 66 | isa = PBXGroup; 67 | children = ( 68 | 5E560BA61D0A291300F065B5 /* Source */, 69 | 5E560B7E1D0A288100F065B5 /* Example */, 70 | 5E560B931D0A288200F065B5 /* ExampleTests */, 71 | 5E560B7D1D0A288000F065B5 /* Products */, 72 | ); 73 | sourceTree = ""; 74 | }; 75 | 5E560B7D1D0A288000F065B5 /* Products */ = { 76 | isa = PBXGroup; 77 | children = ( 78 | 5E560B7C1D0A288000F065B5 /* Example.app */, 79 | 5E560B901D0A288200F065B5 /* ExampleTests.xctest */, 80 | ); 81 | name = Products; 82 | sourceTree = ""; 83 | }; 84 | 5E560B7E1D0A288100F065B5 /* Example */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | 5E560B7F1D0A288100F065B5 /* AppDelegate.swift */, 88 | 5E560B811D0A288100F065B5 /* ViewController.swift */, 89 | 5E560B831D0A288100F065B5 /* Main.storyboard */, 90 | 5E560B861D0A288100F065B5 /* Assets.xcassets */, 91 | 5E560B881D0A288100F065B5 /* LaunchScreen.storyboard */, 92 | 5E560B8B1D0A288100F065B5 /* Info.plist */, 93 | ); 94 | path = Example; 95 | sourceTree = ""; 96 | }; 97 | 5E560B931D0A288200F065B5 /* ExampleTests */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | 5E560B941D0A288200F065B5 /* ExampleTests.swift */, 101 | 5E560B961D0A288200F065B5 /* Info.plist */, 102 | ); 103 | path = ExampleTests; 104 | sourceTree = ""; 105 | }; 106 | 5E560BA61D0A291300F065B5 /* Source */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 5E560BA71D0A291300F065B5 /* GMColor.swift */, 110 | 5E560BA81D0A291300F065B5 /* GMPalette.swift */, 111 | 5E560BA91D0A291300F065B5 /* MaterialColorPicker.swift */, 112 | ); 113 | name = Source; 114 | path = ../Source; 115 | sourceTree = ""; 116 | }; 117 | /* End PBXGroup section */ 118 | 119 | /* Begin PBXNativeTarget section */ 120 | 5E560B7B1D0A288000F065B5 /* Example */ = { 121 | isa = PBXNativeTarget; 122 | buildConfigurationList = 5E560B991D0A288200F065B5 /* Build configuration list for PBXNativeTarget "Example" */; 123 | buildPhases = ( 124 | 5E560B781D0A288000F065B5 /* Sources */, 125 | 5E560B791D0A288000F065B5 /* Frameworks */, 126 | 5E560B7A1D0A288000F065B5 /* Resources */, 127 | ); 128 | buildRules = ( 129 | ); 130 | dependencies = ( 131 | ); 132 | name = Example; 133 | productName = Example; 134 | productReference = 5E560B7C1D0A288000F065B5 /* Example.app */; 135 | productType = "com.apple.product-type.application"; 136 | }; 137 | 5E560B8F1D0A288200F065B5 /* ExampleTests */ = { 138 | isa = PBXNativeTarget; 139 | buildConfigurationList = 5E560B9C1D0A288200F065B5 /* Build configuration list for PBXNativeTarget "ExampleTests" */; 140 | buildPhases = ( 141 | 5E560B8C1D0A288200F065B5 /* Sources */, 142 | 5E560B8D1D0A288200F065B5 /* Frameworks */, 143 | 5E560B8E1D0A288200F065B5 /* Resources */, 144 | ); 145 | buildRules = ( 146 | ); 147 | dependencies = ( 148 | 5E560B921D0A288200F065B5 /* PBXTargetDependency */, 149 | ); 150 | name = ExampleTests; 151 | productName = ExampleTests; 152 | productReference = 5E560B901D0A288200F065B5 /* ExampleTests.xctest */; 153 | productType = "com.apple.product-type.bundle.unit-test"; 154 | }; 155 | /* End PBXNativeTarget section */ 156 | 157 | /* Begin PBXProject section */ 158 | 5E560B741D0A288000F065B5 /* Project object */ = { 159 | isa = PBXProject; 160 | attributes = { 161 | LastSwiftUpdateCheck = 0730; 162 | LastUpgradeCheck = 0800; 163 | ORGANIZATIONNAME = "George Kye"; 164 | TargetAttributes = { 165 | 5E560B7B1D0A288000F065B5 = { 166 | CreatedOnToolsVersion = 7.3; 167 | LastSwiftMigration = 0800; 168 | }; 169 | 5E560B8F1D0A288200F065B5 = { 170 | CreatedOnToolsVersion = 7.3; 171 | LastSwiftMigration = 0800; 172 | TestTargetID = 5E560B7B1D0A288000F065B5; 173 | }; 174 | }; 175 | }; 176 | buildConfigurationList = 5E560B771D0A288000F065B5 /* Build configuration list for PBXProject "Example" */; 177 | compatibilityVersion = "Xcode 3.2"; 178 | developmentRegion = English; 179 | hasScannedForEncodings = 0; 180 | knownRegions = ( 181 | en, 182 | Base, 183 | ); 184 | mainGroup = 5E560B731D0A288000F065B5; 185 | productRefGroup = 5E560B7D1D0A288000F065B5 /* Products */; 186 | projectDirPath = ""; 187 | projectRoot = ""; 188 | targets = ( 189 | 5E560B7B1D0A288000F065B5 /* Example */, 190 | 5E560B8F1D0A288200F065B5 /* ExampleTests */, 191 | ); 192 | }; 193 | /* End PBXProject section */ 194 | 195 | /* Begin PBXResourcesBuildPhase section */ 196 | 5E560B7A1D0A288000F065B5 /* Resources */ = { 197 | isa = PBXResourcesBuildPhase; 198 | buildActionMask = 2147483647; 199 | files = ( 200 | 5E560B8A1D0A288100F065B5 /* LaunchScreen.storyboard in Resources */, 201 | 5E560B871D0A288100F065B5 /* Assets.xcassets in Resources */, 202 | 5E560B851D0A288100F065B5 /* Main.storyboard in Resources */, 203 | ); 204 | runOnlyForDeploymentPostprocessing = 0; 205 | }; 206 | 5E560B8E1D0A288200F065B5 /* Resources */ = { 207 | isa = PBXResourcesBuildPhase; 208 | buildActionMask = 2147483647; 209 | files = ( 210 | ); 211 | runOnlyForDeploymentPostprocessing = 0; 212 | }; 213 | /* End PBXResourcesBuildPhase section */ 214 | 215 | /* Begin PBXSourcesBuildPhase section */ 216 | 5E560B781D0A288000F065B5 /* Sources */ = { 217 | isa = PBXSourcesBuildPhase; 218 | buildActionMask = 2147483647; 219 | files = ( 220 | 5E560BAC1D0A291300F065B5 /* MaterialColorPicker.swift in Sources */, 221 | 5E560B821D0A288100F065B5 /* ViewController.swift in Sources */, 222 | 5E560BAB1D0A291300F065B5 /* GMPalette.swift in Sources */, 223 | 5E560B801D0A288100F065B5 /* AppDelegate.swift in Sources */, 224 | 5E560BAA1D0A291300F065B5 /* GMColor.swift in Sources */, 225 | ); 226 | runOnlyForDeploymentPostprocessing = 0; 227 | }; 228 | 5E560B8C1D0A288200F065B5 /* Sources */ = { 229 | isa = PBXSourcesBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | 5E560B951D0A288200F065B5 /* ExampleTests.swift in Sources */, 233 | ); 234 | runOnlyForDeploymentPostprocessing = 0; 235 | }; 236 | /* End PBXSourcesBuildPhase section */ 237 | 238 | /* Begin PBXTargetDependency section */ 239 | 5E560B921D0A288200F065B5 /* PBXTargetDependency */ = { 240 | isa = PBXTargetDependency; 241 | target = 5E560B7B1D0A288000F065B5 /* Example */; 242 | targetProxy = 5E560B911D0A288200F065B5 /* PBXContainerItemProxy */; 243 | }; 244 | /* End PBXTargetDependency section */ 245 | 246 | /* Begin PBXVariantGroup section */ 247 | 5E560B831D0A288100F065B5 /* Main.storyboard */ = { 248 | isa = PBXVariantGroup; 249 | children = ( 250 | 5E560B841D0A288100F065B5 /* Base */, 251 | ); 252 | name = Main.storyboard; 253 | sourceTree = ""; 254 | }; 255 | 5E560B881D0A288100F065B5 /* LaunchScreen.storyboard */ = { 256 | isa = PBXVariantGroup; 257 | children = ( 258 | 5E560B891D0A288100F065B5 /* Base */, 259 | ); 260 | name = LaunchScreen.storyboard; 261 | sourceTree = ""; 262 | }; 263 | /* End PBXVariantGroup section */ 264 | 265 | /* Begin XCBuildConfiguration section */ 266 | 5E560B971D0A288200F065B5 /* Debug */ = { 267 | isa = XCBuildConfiguration; 268 | buildSettings = { 269 | ALWAYS_SEARCH_USER_PATHS = NO; 270 | CLANG_ANALYZER_NONNULL = YES; 271 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 272 | CLANG_CXX_LIBRARY = "libc++"; 273 | CLANG_ENABLE_MODULES = YES; 274 | CLANG_ENABLE_OBJC_ARC = YES; 275 | CLANG_WARN_BOOL_CONVERSION = YES; 276 | CLANG_WARN_CONSTANT_CONVERSION = YES; 277 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 278 | CLANG_WARN_EMPTY_BODY = YES; 279 | CLANG_WARN_ENUM_CONVERSION = YES; 280 | CLANG_WARN_INFINITE_RECURSION = YES; 281 | CLANG_WARN_INT_CONVERSION = YES; 282 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 283 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 284 | CLANG_WARN_UNREACHABLE_CODE = YES; 285 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 286 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 287 | COPY_PHASE_STRIP = NO; 288 | DEBUG_INFORMATION_FORMAT = dwarf; 289 | ENABLE_STRICT_OBJC_MSGSEND = YES; 290 | ENABLE_TESTABILITY = YES; 291 | GCC_C_LANGUAGE_STANDARD = gnu99; 292 | GCC_DYNAMIC_NO_PIC = NO; 293 | GCC_NO_COMMON_BLOCKS = YES; 294 | GCC_OPTIMIZATION_LEVEL = 0; 295 | GCC_PREPROCESSOR_DEFINITIONS = ( 296 | "DEBUG=1", 297 | "$(inherited)", 298 | ); 299 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 300 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 301 | GCC_WARN_UNDECLARED_SELECTOR = YES; 302 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 303 | GCC_WARN_UNUSED_FUNCTION = YES; 304 | GCC_WARN_UNUSED_VARIABLE = YES; 305 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 306 | MTL_ENABLE_DEBUG_INFO = YES; 307 | ONLY_ACTIVE_ARCH = YES; 308 | SDKROOT = iphoneos; 309 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 310 | }; 311 | name = Debug; 312 | }; 313 | 5E560B981D0A288200F065B5 /* Release */ = { 314 | isa = XCBuildConfiguration; 315 | buildSettings = { 316 | ALWAYS_SEARCH_USER_PATHS = NO; 317 | CLANG_ANALYZER_NONNULL = YES; 318 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 319 | CLANG_CXX_LIBRARY = "libc++"; 320 | CLANG_ENABLE_MODULES = YES; 321 | CLANG_ENABLE_OBJC_ARC = YES; 322 | CLANG_WARN_BOOL_CONVERSION = YES; 323 | CLANG_WARN_CONSTANT_CONVERSION = YES; 324 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 325 | CLANG_WARN_EMPTY_BODY = YES; 326 | CLANG_WARN_ENUM_CONVERSION = YES; 327 | CLANG_WARN_INFINITE_RECURSION = YES; 328 | CLANG_WARN_INT_CONVERSION = YES; 329 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 330 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 331 | CLANG_WARN_UNREACHABLE_CODE = YES; 332 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 333 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 334 | COPY_PHASE_STRIP = NO; 335 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 336 | ENABLE_NS_ASSERTIONS = NO; 337 | ENABLE_STRICT_OBJC_MSGSEND = YES; 338 | GCC_C_LANGUAGE_STANDARD = gnu99; 339 | GCC_NO_COMMON_BLOCKS = YES; 340 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 341 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 342 | GCC_WARN_UNDECLARED_SELECTOR = YES; 343 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 344 | GCC_WARN_UNUSED_FUNCTION = YES; 345 | GCC_WARN_UNUSED_VARIABLE = YES; 346 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 347 | MTL_ENABLE_DEBUG_INFO = NO; 348 | SDKROOT = iphoneos; 349 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 350 | VALIDATE_PRODUCT = YES; 351 | }; 352 | name = Release; 353 | }; 354 | 5E560B9A1D0A288200F065B5 /* Debug */ = { 355 | isa = XCBuildConfiguration; 356 | buildSettings = { 357 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 358 | INFOPLIST_FILE = Example/Info.plist; 359 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 360 | PRODUCT_BUNDLE_IDENTIFIER = GeorgeKye.Example; 361 | PRODUCT_NAME = "$(TARGET_NAME)"; 362 | SWIFT_VERSION = 3.0; 363 | }; 364 | name = Debug; 365 | }; 366 | 5E560B9B1D0A288200F065B5 /* Release */ = { 367 | isa = XCBuildConfiguration; 368 | buildSettings = { 369 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 370 | INFOPLIST_FILE = Example/Info.plist; 371 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 372 | PRODUCT_BUNDLE_IDENTIFIER = GeorgeKye.Example; 373 | PRODUCT_NAME = "$(TARGET_NAME)"; 374 | SWIFT_VERSION = 3.0; 375 | }; 376 | name = Release; 377 | }; 378 | 5E560B9D1D0A288200F065B5 /* Debug */ = { 379 | isa = XCBuildConfiguration; 380 | buildSettings = { 381 | BUNDLE_LOADER = "$(TEST_HOST)"; 382 | INFOPLIST_FILE = ExampleTests/Info.plist; 383 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 384 | PRODUCT_BUNDLE_IDENTIFIER = GeorgeKye.ExampleTests; 385 | PRODUCT_NAME = "$(TARGET_NAME)"; 386 | SWIFT_VERSION = 3.0; 387 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/Example"; 388 | }; 389 | name = Debug; 390 | }; 391 | 5E560B9E1D0A288200F065B5 /* Release */ = { 392 | isa = XCBuildConfiguration; 393 | buildSettings = { 394 | BUNDLE_LOADER = "$(TEST_HOST)"; 395 | INFOPLIST_FILE = ExampleTests/Info.plist; 396 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 397 | PRODUCT_BUNDLE_IDENTIFIER = GeorgeKye.ExampleTests; 398 | PRODUCT_NAME = "$(TARGET_NAME)"; 399 | SWIFT_VERSION = 3.0; 400 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/Example"; 401 | }; 402 | name = Release; 403 | }; 404 | /* End XCBuildConfiguration section */ 405 | 406 | /* Begin XCConfigurationList section */ 407 | 5E560B771D0A288000F065B5 /* Build configuration list for PBXProject "Example" */ = { 408 | isa = XCConfigurationList; 409 | buildConfigurations = ( 410 | 5E560B971D0A288200F065B5 /* Debug */, 411 | 5E560B981D0A288200F065B5 /* Release */, 412 | ); 413 | defaultConfigurationIsVisible = 0; 414 | defaultConfigurationName = Release; 415 | }; 416 | 5E560B991D0A288200F065B5 /* Build configuration list for PBXNativeTarget "Example" */ = { 417 | isa = XCConfigurationList; 418 | buildConfigurations = ( 419 | 5E560B9A1D0A288200F065B5 /* Debug */, 420 | 5E560B9B1D0A288200F065B5 /* Release */, 421 | ); 422 | defaultConfigurationIsVisible = 0; 423 | defaultConfigurationName = Release; 424 | }; 425 | 5E560B9C1D0A288200F065B5 /* Build configuration list for PBXNativeTarget "ExampleTests" */ = { 426 | isa = XCConfigurationList; 427 | buildConfigurations = ( 428 | 5E560B9D1D0A288200F065B5 /* Debug */, 429 | 5E560B9E1D0A288200F065B5 /* Release */, 430 | ); 431 | defaultConfigurationIsVisible = 0; 432 | defaultConfigurationName = Release; 433 | }; 434 | /* End XCConfigurationList section */ 435 | }; 436 | rootObject = 5E560B741D0A288000F065B5 /* Project object */; 437 | } 438 | -------------------------------------------------------------------------------- /Source/GMColor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GMColor.swift 3 | // GMColor 4 | // 5 | // Created by Todsaporn Banjerdkit (katopz) on 12/19/14. 6 | // Copyright (c) 2014 Debokeh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UIColor { 12 | convenience init(rgb: UInt, a:CGFloat) { 13 | self.init( 14 | red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0, 15 | green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0, 16 | blue: CGFloat(rgb & 0x0000FF) / 255.0, 17 | alpha: a 18 | ) 19 | } 20 | 21 | convenience init(rgb: UInt) { 22 | self.init(rgb: rgb, a:1.0) 23 | } 24 | } 25 | 26 | public struct GMColor { 27 | 28 | // MARK: - red 29 | 30 | public static func red50Color() -> UIColor { 31 | return UIColor(rgb: 0xffebee) 32 | } 33 | 34 | public static func red100Color() -> UIColor { 35 | return UIColor(rgb: 0xffcdd2) 36 | } 37 | 38 | public static func red200Color() -> UIColor { 39 | return UIColor(rgb: 0xef9a9a) 40 | } 41 | 42 | public static func red300Color() -> UIColor { 43 | return UIColor(rgb: 0xe57373) 44 | } 45 | 46 | public static func red400Color() -> UIColor { 47 | return UIColor(rgb: 0xef5350) 48 | } 49 | 50 | public static func red500Color() -> UIColor { 51 | return UIColor(rgb: 0xf44336) 52 | } 53 | 54 | public static func red600Color() -> UIColor { 55 | return UIColor(rgb: 0xe53935) 56 | } 57 | 58 | public static func red700Color() -> UIColor { 59 | return UIColor(rgb: 0xd32f2f) 60 | } 61 | 62 | public static func red800Color() -> UIColor { 63 | return UIColor(rgb: 0xc62828) 64 | } 65 | 66 | public static func red900Color() -> UIColor { 67 | return UIColor(rgb: 0xb71c1c) 68 | } 69 | 70 | public static func redA100Color() -> UIColor { 71 | return UIColor(rgb: 0xff8a80) 72 | } 73 | 74 | public static func redA200Color() -> UIColor { 75 | return UIColor(rgb: 0xff5252) 76 | } 77 | 78 | public static func redA400Color() -> UIColor { 79 | return UIColor(rgb: 0xff1744) 80 | } 81 | 82 | public static func redA700Color() -> UIColor { 83 | return UIColor(rgb: 0xd50000) 84 | } 85 | 86 | // MARK: - pink 87 | 88 | public static func pink50Color() -> UIColor { 89 | return UIColor(rgb: 0xfce4ec) 90 | } 91 | 92 | public static func pink100Color() -> UIColor { 93 | return UIColor(rgb: 0xf8bbd0) 94 | } 95 | 96 | public static func pink200Color() -> UIColor { 97 | return UIColor(rgb: 0xf48fb1) 98 | } 99 | 100 | public static func pink300Color() -> UIColor { 101 | return UIColor(rgb: 0xf06292) 102 | } 103 | 104 | public static func pink400Color() -> UIColor { 105 | return UIColor(rgb: 0xec407a) 106 | } 107 | 108 | public static func pink500Color() -> UIColor { 109 | return UIColor(rgb: 0xe91e63) 110 | } 111 | 112 | public static func pink600Color() -> UIColor { 113 | return UIColor(rgb: 0xd81b60) 114 | } 115 | 116 | public static func pink700Color() -> UIColor { 117 | return UIColor(rgb: 0xc2185b) 118 | } 119 | 120 | public static func pink800Color() -> UIColor { 121 | return UIColor(rgb: 0xad1457) 122 | } 123 | 124 | public static func pink900Color() -> UIColor { 125 | return UIColor(rgb: 0x880e4f) 126 | } 127 | 128 | public static func pinkA100Color() -> UIColor { 129 | return UIColor(rgb: 0xff80ab) 130 | } 131 | 132 | public static func pinkA200Color() -> UIColor { 133 | return UIColor(rgb: 0xff4081) 134 | } 135 | 136 | public static func pinkA400Color() -> UIColor { 137 | return UIColor(rgb: 0xf50057) 138 | } 139 | 140 | public static func pinkA700Color() -> UIColor { 141 | return UIColor(rgb: 0xc51162) 142 | } 143 | 144 | // MARK: - purple 145 | 146 | public static func purple50Color() -> UIColor { 147 | return UIColor(rgb: 0xf3e5f5) 148 | } 149 | 150 | public static func purple100Color() -> UIColor { 151 | return UIColor(rgb: 0xe1bee7) 152 | } 153 | 154 | public static func purple200Color() -> UIColor { 155 | return UIColor(rgb: 0xce93d8) 156 | } 157 | 158 | public static func purple300Color() -> UIColor { 159 | return UIColor(rgb: 0xba68c8) 160 | } 161 | 162 | public static func purple400Color() -> UIColor { 163 | return UIColor(rgb: 0xab47bc) 164 | } 165 | 166 | public static func purple500Color() -> UIColor { 167 | return UIColor(rgb: 0x9c27b0) 168 | } 169 | 170 | public static func purple600Color() -> UIColor { 171 | return UIColor(rgb: 0x8e24aa) 172 | } 173 | 174 | public static func purple700Color() -> UIColor { 175 | return UIColor(rgb: 0x7b1fa2) 176 | } 177 | 178 | public static func purple800Color() -> UIColor { 179 | return UIColor(rgb: 0x6a1b9a) 180 | } 181 | 182 | public static func purple900Color() -> UIColor { 183 | return UIColor(rgb: 0x4a148c) 184 | } 185 | 186 | public static func purpleA100Color() -> UIColor { 187 | return UIColor(rgb: 0xea80fc) 188 | } 189 | 190 | public static func purpleA200Color() -> UIColor { 191 | return UIColor(rgb: 0xe040fb) 192 | } 193 | 194 | public static func purpleA400Color() -> UIColor { 195 | return UIColor(rgb: 0xd500f9) 196 | } 197 | 198 | public static func purpleA700Color() -> UIColor { 199 | return UIColor(rgb: 0xaa00ff) 200 | } 201 | 202 | // MARK: - deep-purple 203 | 204 | public static func deepPurple50Color() -> UIColor { 205 | return UIColor(rgb: 0xede7f6) 206 | } 207 | 208 | public static func deepPurple100Color() -> UIColor { 209 | return UIColor(rgb: 0xd1c4e9) 210 | } 211 | 212 | public static func deepPurple200Color() -> UIColor { 213 | return UIColor(rgb: 0xb39ddb) 214 | } 215 | 216 | public static func deepPurple300Color() -> UIColor { 217 | return UIColor(rgb: 0x9575cd) 218 | } 219 | 220 | public static func deepPurple400Color() -> UIColor { 221 | return UIColor(rgb: 0x7e57c2) 222 | } 223 | 224 | public static func deepPurple500Color() -> UIColor { 225 | return UIColor(rgb: 0x673ab7) 226 | } 227 | 228 | public static func deepPurple600Color() -> UIColor { 229 | return UIColor(rgb: 0x5e35b1) 230 | } 231 | 232 | public static func deepPurple700Color() -> UIColor { 233 | return UIColor(rgb: 0x512da8) 234 | } 235 | 236 | public static func deepPurple800Color() -> UIColor { 237 | return UIColor(rgb: 0x4527a0) 238 | } 239 | 240 | public static func deepPurple900Color() -> UIColor { 241 | return UIColor(rgb: 0x311b92) 242 | } 243 | 244 | public static func deepPurpleA100Color() -> UIColor { 245 | return UIColor(rgb: 0xb388ff) 246 | } 247 | 248 | public static func deepPurpleA200Color() -> UIColor { 249 | return UIColor(rgb: 0x7c4dff) 250 | } 251 | 252 | public static func deepPurpleA400Color() -> UIColor { 253 | return UIColor(rgb: 0x651fff) 254 | } 255 | 256 | public static func deepPurpleA700Color() -> UIColor { 257 | return UIColor(rgb: 0x6200ea) 258 | } 259 | 260 | // MARK: - indigo 261 | 262 | public static func indigo50Color() -> UIColor { 263 | return UIColor(rgb: 0xe8eaf6) 264 | } 265 | 266 | public static func indigo100Color() -> UIColor { 267 | return UIColor(rgb: 0xc5cae9) 268 | } 269 | 270 | public static func indigo200Color() -> UIColor { 271 | return UIColor(rgb: 0x9fa8da) 272 | } 273 | 274 | public static func indigo300Color() -> UIColor { 275 | return UIColor(rgb: 0x7986cb) 276 | } 277 | 278 | public static func indigo400Color() -> UIColor { 279 | return UIColor(rgb: 0x5c6bc0) 280 | } 281 | 282 | public static func indigo500Color() -> UIColor { 283 | return UIColor(rgb: 0x3f51b5) 284 | } 285 | 286 | public static func indigo600Color() -> UIColor { 287 | return UIColor(rgb: 0x3949ab) 288 | } 289 | 290 | public static func indigo700Color() -> UIColor { 291 | return UIColor(rgb: 0x303f9f) 292 | } 293 | 294 | public static func indigo800Color() -> UIColor { 295 | return UIColor(rgb: 0x283593) 296 | } 297 | 298 | public static func indigo900Color() -> UIColor { 299 | return UIColor(rgb: 0x1a237e) 300 | } 301 | 302 | public static func indigoA100Color() -> UIColor { 303 | return UIColor(rgb: 0x8c9eff) 304 | } 305 | 306 | public static func indigoA200Color() -> UIColor { 307 | return UIColor(rgb: 0x536dfe) 308 | } 309 | 310 | public static func indigoA400Color() -> UIColor { 311 | return UIColor(rgb: 0x3d5afe) 312 | } 313 | 314 | public static func indigoA700Color() -> UIColor { 315 | return UIColor(rgb: 0x304ffe) 316 | } 317 | 318 | // MARK: - blue 319 | 320 | public static func blue50Color() -> UIColor { 321 | return UIColor(rgb: 0xe3f2fd) 322 | } 323 | 324 | public static func blue100Color() -> UIColor { 325 | return UIColor(rgb: 0xbbdefb) 326 | } 327 | 328 | public static func blue200Color() -> UIColor { 329 | return UIColor(rgb: 0x90caf9) 330 | } 331 | 332 | public static func blue300Color() -> UIColor { 333 | return UIColor(rgb: 0x64b5f6) 334 | } 335 | 336 | public static func blue400Color() -> UIColor { 337 | return UIColor(rgb: 0x42a5f5) 338 | } 339 | 340 | public static func blue500Color() -> UIColor { 341 | return UIColor(rgb: 0x2196f3) 342 | } 343 | 344 | public static func blue600Color() -> UIColor { 345 | return UIColor(rgb: 0x1e88e5) 346 | } 347 | 348 | public static func blue700Color() -> UIColor { 349 | return UIColor(rgb: 0x1976d2) 350 | } 351 | 352 | public static func blue800Color() -> UIColor { 353 | return UIColor(rgb: 0x1565c0) 354 | } 355 | 356 | public static func blue900Color() -> UIColor { 357 | return UIColor(rgb: 0x0d47a1) 358 | } 359 | 360 | public static func blueA100Color() -> UIColor { 361 | return UIColor(rgb: 0x82b1ff) 362 | } 363 | 364 | public static func blueA200Color() -> UIColor { 365 | return UIColor(rgb: 0x448aff) 366 | } 367 | 368 | public static func blueA400Color() -> UIColor { 369 | return UIColor(rgb: 0x2979ff) 370 | } 371 | 372 | public static func blueA700Color() -> UIColor { 373 | return UIColor(rgb: 0x2962ff) 374 | } 375 | 376 | // MARK: - light-blue 377 | 378 | public static func lightBlue50Color() -> UIColor { 379 | return UIColor(rgb: 0xe1f5fe) 380 | } 381 | 382 | public static func lightBlue100Color() -> UIColor { 383 | return UIColor(rgb: 0xb3e5fc) 384 | } 385 | 386 | public static func lightBlue200Color() -> UIColor { 387 | return UIColor(rgb: 0x81d4fa) 388 | } 389 | 390 | public static func lightBlue300Color() -> UIColor { 391 | return UIColor(rgb: 0x4fc3f7) 392 | } 393 | 394 | public static func lightBlue400Color() -> UIColor { 395 | return UIColor(rgb: 0x29b6f6) 396 | } 397 | 398 | public static func lightBlue500Color() -> UIColor { 399 | return UIColor(rgb: 0x03a9f4) 400 | } 401 | 402 | public static func lightBlue600Color() -> UIColor { 403 | return UIColor(rgb: 0x039be5) 404 | } 405 | 406 | public static func lightBlue700Color() -> UIColor { 407 | return UIColor(rgb: 0x0288d1) 408 | } 409 | 410 | public static func lightBlue800Color() -> UIColor { 411 | return UIColor(rgb: 0x0277bd) 412 | } 413 | 414 | public static func lightBlue900Color() -> UIColor { 415 | return UIColor(rgb: 0x01579b) 416 | } 417 | 418 | public static func lightBlueA100Color() -> UIColor { 419 | return UIColor(rgb: 0x80d8ff) 420 | } 421 | 422 | public static func lightBlueA200Color() -> UIColor { 423 | return UIColor(rgb: 0x40c4ff) 424 | } 425 | 426 | public static func lightBlueA400Color() -> UIColor { 427 | return UIColor(rgb: 0x00b0ff) 428 | } 429 | 430 | public static func lightBlueA700Color() -> UIColor { 431 | return UIColor(rgb: 0x0091ea) 432 | } 433 | 434 | // MARK: - cyan 435 | 436 | public static func cyan50Color() -> UIColor { 437 | return UIColor(rgb: 0xe0f7fa) 438 | } 439 | 440 | public static func cyan100Color() -> UIColor { 441 | return UIColor(rgb: 0xb2ebf2) 442 | } 443 | 444 | public static func cyan200Color() -> UIColor { 445 | return UIColor(rgb: 0x80deea) 446 | } 447 | 448 | public static func cyan300Color() -> UIColor { 449 | return UIColor(rgb: 0x4dd0e1) 450 | } 451 | 452 | public static func cyan400Color() -> UIColor { 453 | return UIColor(rgb: 0x26c6da) 454 | } 455 | 456 | public static func cyan500Color() -> UIColor { 457 | return UIColor(rgb: 0x00bcd4) 458 | } 459 | 460 | public static func cyan600Color() -> UIColor { 461 | return UIColor(rgb: 0x00acc1) 462 | } 463 | 464 | public static func cyan700Color() -> UIColor { 465 | return UIColor(rgb: 0x0097a7) 466 | } 467 | 468 | public static func cyan800Color() -> UIColor { 469 | return UIColor(rgb: 0x00838f) 470 | } 471 | 472 | public static func cyan900Color() -> UIColor { 473 | return UIColor(rgb: 0x006064) 474 | } 475 | 476 | public static func cyanA100Color() -> UIColor { 477 | return UIColor(rgb: 0x84ffff) 478 | } 479 | 480 | public static func cyanA200Color() -> UIColor { 481 | return UIColor(rgb: 0x18ffff) 482 | } 483 | 484 | public static func cyanA400Color() -> UIColor { 485 | return UIColor(rgb: 0x00e5ff) 486 | } 487 | 488 | public static func cyanA700Color() -> UIColor { 489 | return UIColor(rgb: 0x00b8d4) 490 | } 491 | 492 | // MARK: - teal 493 | 494 | public static func teal50Color() -> UIColor { 495 | return UIColor(rgb: 0xe0f2f1) 496 | } 497 | 498 | public static func teal100Color() -> UIColor { 499 | return UIColor(rgb: 0xb2dfdb) 500 | } 501 | 502 | public static func teal200Color() -> UIColor { 503 | return UIColor(rgb: 0x80cbc4) 504 | } 505 | 506 | public static func teal300Color() -> UIColor { 507 | return UIColor(rgb: 0x4db6ac) 508 | } 509 | 510 | public static func teal400Color() -> UIColor { 511 | return UIColor(rgb: 0x26a69a) 512 | } 513 | 514 | public static func teal500Color() -> UIColor { 515 | return UIColor(rgb: 0x009688) 516 | } 517 | 518 | public static func teal600Color() -> UIColor { 519 | return UIColor(rgb: 0x00897b) 520 | } 521 | 522 | public static func teal700Color() -> UIColor { 523 | return UIColor(rgb: 0x00796b) 524 | } 525 | 526 | public static func teal800Color() -> UIColor { 527 | return UIColor(rgb: 0x00695c) 528 | } 529 | 530 | public static func teal900Color() -> UIColor { 531 | return UIColor(rgb: 0x004d40) 532 | } 533 | 534 | public static func tealA100Color() -> UIColor { 535 | return UIColor(rgb: 0xa7ffeb) 536 | } 537 | 538 | public static func tealA200Color() -> UIColor { 539 | return UIColor(rgb: 0x64ffda) 540 | } 541 | 542 | public static func tealA400Color() -> UIColor { 543 | return UIColor(rgb: 0x1de9b6) 544 | } 545 | 546 | public static func tealA700Color() -> UIColor { 547 | return UIColor(rgb: 0x00bfa5) 548 | } 549 | 550 | // MARK: - green 551 | 552 | public static func green50Color() -> UIColor { 553 | return UIColor(rgb: 0xe8f5e9) 554 | } 555 | 556 | public static func green100Color() -> UIColor { 557 | return UIColor(rgb: 0xc8e6c9) 558 | } 559 | 560 | public static func green200Color() -> UIColor { 561 | return UIColor(rgb: 0xa5d6a7) 562 | } 563 | 564 | public static func green300Color() -> UIColor { 565 | return UIColor(rgb: 0x81c784) 566 | } 567 | 568 | public static func green400Color() -> UIColor { 569 | return UIColor(rgb: 0x66bb6a) 570 | } 571 | 572 | public static func green500Color() -> UIColor { 573 | return UIColor(rgb: 0x4caf50) 574 | } 575 | 576 | public static func green600Color() -> UIColor { 577 | return UIColor(rgb: 0x43a047) 578 | } 579 | 580 | public static func green700Color() -> UIColor { 581 | return UIColor(rgb: 0x388e3c) 582 | } 583 | 584 | public static func green800Color() -> UIColor { 585 | return UIColor(rgb: 0x2e7d32) 586 | } 587 | 588 | public static func green900Color() -> UIColor { 589 | return UIColor(rgb: 0x1b5e20) 590 | } 591 | 592 | public static func greenA100Color() -> UIColor { 593 | return UIColor(rgb: 0xb9f6ca) 594 | } 595 | 596 | public static func greenA200Color() -> UIColor { 597 | return UIColor(rgb: 0x69f0ae) 598 | } 599 | 600 | public static func greenA400Color() -> UIColor { 601 | return UIColor(rgb: 0x00e676) 602 | } 603 | 604 | public static func greenA700Color() -> UIColor { 605 | return UIColor(rgb: 0x00c853) 606 | } 607 | 608 | // MARK: - light-green 609 | 610 | public static func lightGreen50Color() -> UIColor { 611 | return UIColor(rgb: 0xf1f8e9) 612 | } 613 | 614 | public static func lightGreen100Color() -> UIColor { 615 | return UIColor(rgb: 0xdcedc8) 616 | } 617 | 618 | public static func lightGreen200Color() -> UIColor { 619 | return UIColor(rgb: 0xc5e1a5) 620 | } 621 | 622 | public static func lightGreen300Color() -> UIColor { 623 | return UIColor(rgb: 0xaed581) 624 | } 625 | 626 | public static func lightGreen400Color() -> UIColor { 627 | return UIColor(rgb: 0x9ccc65) 628 | } 629 | 630 | public static func lightGreen500Color() -> UIColor { 631 | return UIColor(rgb: 0x8bc34a) 632 | } 633 | 634 | public static func lightGreen600Color() -> UIColor { 635 | return UIColor(rgb: 0x7cb342) 636 | } 637 | 638 | public static func lightGreen700Color() -> UIColor { 639 | return UIColor(rgb: 0x689f38) 640 | } 641 | 642 | public static func lightGreen800Color() -> UIColor { 643 | return UIColor(rgb: 0x558b2f) 644 | } 645 | 646 | public static func lightGreen900Color() -> UIColor { 647 | return UIColor(rgb: 0x33691e) 648 | } 649 | 650 | public static func lightGreenA100Color() -> UIColor { 651 | return UIColor(rgb: 0xccff90) 652 | } 653 | 654 | public static func lightGreenA200Color() -> UIColor { 655 | return UIColor(rgb: 0xb2ff59) 656 | } 657 | 658 | public static func lightGreenA400Color() -> UIColor { 659 | return UIColor(rgb: 0x76ff03) 660 | } 661 | 662 | public static func lightGreenA700Color() -> UIColor { 663 | return UIColor(rgb: 0x64dd17) 664 | } 665 | 666 | // MARK: - lime 667 | 668 | public static func lime50Color() -> UIColor { 669 | return UIColor(rgb: 0xf9fbe7) 670 | } 671 | 672 | public static func lime100Color() -> UIColor { 673 | return UIColor(rgb: 0xf0f4c3) 674 | } 675 | 676 | public static func lime200Color() -> UIColor { 677 | return UIColor(rgb: 0xe6ee9c) 678 | } 679 | 680 | public static func lime300Color() -> UIColor { 681 | return UIColor(rgb: 0xdce775) 682 | } 683 | 684 | public static func lime400Color() -> UIColor { 685 | return UIColor(rgb: 0xd4e157) 686 | } 687 | 688 | public static func lime500Color() -> UIColor { 689 | return UIColor(rgb: 0xcddc39) 690 | } 691 | 692 | public static func lime600Color() -> UIColor { 693 | return UIColor(rgb: 0xc0ca33) 694 | } 695 | 696 | public static func lime700Color() -> UIColor { 697 | return UIColor(rgb: 0xafb42b) 698 | } 699 | 700 | public static func lime800Color() -> UIColor { 701 | return UIColor(rgb: 0x9e9d24) 702 | } 703 | 704 | public static func lime900Color() -> UIColor { 705 | return UIColor(rgb: 0x827717) 706 | } 707 | 708 | public static func limeA100Color() -> UIColor { 709 | return UIColor(rgb: 0xf4ff81) 710 | } 711 | 712 | public static func limeA200Color() -> UIColor { 713 | return UIColor(rgb: 0xeeff41) 714 | } 715 | 716 | public static func limeA400Color() -> UIColor { 717 | return UIColor(rgb: 0xc6ff00) 718 | } 719 | 720 | public static func limeA700Color() -> UIColor { 721 | return UIColor(rgb: 0xaeea00) 722 | } 723 | 724 | // MARK: - yellow 725 | 726 | public static func yellow50Color() -> UIColor { 727 | return UIColor(rgb: 0xfffde7) 728 | } 729 | 730 | public static func yellow100Color() -> UIColor { 731 | return UIColor(rgb: 0xfff9c4) 732 | } 733 | 734 | public static func yellow200Color() -> UIColor { 735 | return UIColor(rgb: 0xfff59d) 736 | } 737 | 738 | public static func yellow300Color() -> UIColor { 739 | return UIColor(rgb: 0xfff176) 740 | } 741 | 742 | public static func yellow400Color() -> UIColor { 743 | return UIColor(rgb: 0xffee58) 744 | } 745 | 746 | public static func yellow500Color() -> UIColor { 747 | return UIColor(rgb: 0xffeb3b) 748 | } 749 | 750 | public static func yellow600Color() -> UIColor { 751 | return UIColor(rgb: 0xfdd835) 752 | } 753 | 754 | public static func yellow700Color() -> UIColor { 755 | return UIColor(rgb: 0xfbc02d) 756 | } 757 | 758 | public static func yellow800Color() -> UIColor { 759 | return UIColor(rgb: 0xf9a825) 760 | } 761 | 762 | public static func yellow900Color() -> UIColor { 763 | return UIColor(rgb: 0xf57f17) 764 | } 765 | 766 | public static func yellowA100Color() -> UIColor { 767 | return UIColor(rgb: 0xffff8d) 768 | } 769 | 770 | public static func yellowA200Color() -> UIColor { 771 | return UIColor(rgb: 0xffff00) 772 | } 773 | 774 | public static func yellowA400Color() -> UIColor { 775 | return UIColor(rgb: 0xffea00) 776 | } 777 | 778 | public static func yellowA700Color() -> UIColor { 779 | return UIColor(rgb: 0xffd600) 780 | } 781 | 782 | // MARK: - amber 783 | 784 | public static func amber50Color() -> UIColor { 785 | return UIColor(rgb: 0xfff8e1) 786 | } 787 | 788 | public static func amber100Color() -> UIColor { 789 | return UIColor(rgb: 0xffecb3) 790 | } 791 | 792 | public static func amber200Color() -> UIColor { 793 | return UIColor(rgb: 0xffe082) 794 | } 795 | 796 | public static func amber300Color() -> UIColor { 797 | return UIColor(rgb: 0xffd54f) 798 | } 799 | 800 | public static func amber400Color() -> UIColor { 801 | return UIColor(rgb: 0xffca28) 802 | } 803 | 804 | public static func amber500Color() -> UIColor { 805 | return UIColor(rgb: 0xffc107) 806 | } 807 | 808 | public static func amber600Color() -> UIColor { 809 | return UIColor(rgb: 0xffb300) 810 | } 811 | 812 | public static func amber700Color() -> UIColor { 813 | return UIColor(rgb: 0xffa000) 814 | } 815 | 816 | public static func amber800Color() -> UIColor { 817 | return UIColor(rgb: 0xff8f00) 818 | } 819 | 820 | public static func amber900Color() -> UIColor { 821 | return UIColor(rgb: 0xff6f00) 822 | } 823 | 824 | public static func amberA100Color() -> UIColor { 825 | return UIColor(rgb: 0xffe57f) 826 | } 827 | 828 | public static func amberA200Color() -> UIColor { 829 | return UIColor(rgb: 0xffd740) 830 | } 831 | 832 | public static func amberA400Color() -> UIColor { 833 | return UIColor(rgb: 0xffc400) 834 | } 835 | 836 | public static func amberA700Color() -> UIColor { 837 | return UIColor(rgb: 0xffab00) 838 | } 839 | 840 | // MARK: - orange 841 | 842 | public static func orange50Color() -> UIColor { 843 | return UIColor(rgb: 0xfff3e0) 844 | } 845 | 846 | public static func orange100Color() -> UIColor { 847 | return UIColor(rgb: 0xffe0b2) 848 | } 849 | 850 | public static func orange200Color() -> UIColor { 851 | return UIColor(rgb: 0xffcc80) 852 | } 853 | 854 | public static func orange300Color() -> UIColor { 855 | return UIColor(rgb: 0xffb74d) 856 | } 857 | 858 | public static func orange400Color() -> UIColor { 859 | return UIColor(rgb: 0xffa726) 860 | } 861 | 862 | public static func orange500Color() -> UIColor { 863 | return UIColor(rgb: 0xff9800) 864 | } 865 | 866 | public static func orange600Color() -> UIColor { 867 | return UIColor(rgb: 0xfb8c00) 868 | } 869 | 870 | public static func orange700Color() -> UIColor { 871 | return UIColor(rgb: 0xf57c00) 872 | } 873 | 874 | public static func orange800Color() -> UIColor { 875 | return UIColor(rgb: 0xef6c00) 876 | } 877 | 878 | public static func orange900Color() -> UIColor { 879 | return UIColor(rgb: 0xe65100) 880 | } 881 | 882 | public static func orangeA100Color() -> UIColor { 883 | return UIColor(rgb: 0xffd180) 884 | } 885 | 886 | public static func orangeA200Color() -> UIColor { 887 | return UIColor(rgb: 0xffab40) 888 | } 889 | 890 | public static func orangeA400Color() -> UIColor { 891 | return UIColor(rgb: 0xff9100) 892 | } 893 | 894 | public static func orangeA700Color() -> UIColor { 895 | return UIColor(rgb: 0xff6d00) 896 | } 897 | 898 | // MARK: - deep-orange 899 | 900 | public static func deepOrange50Color() -> UIColor { 901 | return UIColor(rgb: 0xfbe9e7) 902 | } 903 | 904 | public static func deepOrange100Color() -> UIColor { 905 | return UIColor(rgb: 0xffccbc) 906 | } 907 | 908 | public static func deepOrange200Color() -> UIColor { 909 | return UIColor(rgb: 0xffab91) 910 | } 911 | 912 | public static func deepOrange300Color() -> UIColor { 913 | return UIColor(rgb: 0xff8a65) 914 | } 915 | 916 | public static func deepOrange400Color() -> UIColor { 917 | return UIColor(rgb: 0xff7043) 918 | } 919 | 920 | public static func deepOrange500Color() -> UIColor { 921 | return UIColor(rgb: 0xff5722) 922 | } 923 | 924 | public static func deepOrange600Color() -> UIColor { 925 | return UIColor(rgb: 0xf4511e) 926 | } 927 | 928 | public static func deepOrange700Color() -> UIColor { 929 | return UIColor(rgb: 0xe64a19) 930 | } 931 | 932 | public static func deepOrange800Color() -> UIColor { 933 | return UIColor(rgb: 0xd84315) 934 | } 935 | 936 | public static func deepOrange900Color() -> UIColor { 937 | return UIColor(rgb: 0xbf360c) 938 | } 939 | 940 | public static func deepOrangeA100Color() -> UIColor { 941 | return UIColor(rgb: 0xff9e80) 942 | } 943 | 944 | public static func deepOrangeA200Color() -> UIColor { 945 | return UIColor(rgb: 0xff6e40) 946 | } 947 | 948 | public static func deepOrangeA400Color() -> UIColor { 949 | return UIColor(rgb: 0xff3d00) 950 | } 951 | 952 | public static func deepOrangeA700Color() -> UIColor { 953 | return UIColor(rgb: 0xdd2c00) 954 | } 955 | 956 | // MARK: - brown 957 | 958 | public static func brown50Color() -> UIColor { 959 | return UIColor(rgb: 0xefebe9) 960 | } 961 | 962 | public static func brown100Color() -> UIColor { 963 | return UIColor(rgb: 0xd7ccc8) 964 | } 965 | 966 | public static func brown200Color() -> UIColor { 967 | return UIColor(rgb: 0xbcaaa4) 968 | } 969 | 970 | public static func brown300Color() -> UIColor { 971 | return UIColor(rgb: 0xa1887f) 972 | } 973 | 974 | public static func brown400Color() -> UIColor { 975 | return UIColor(rgb: 0x8d6e63) 976 | } 977 | 978 | public static func brown500Color() -> UIColor { 979 | return UIColor(rgb: 0x795548) 980 | } 981 | 982 | public static func brown600Color() -> UIColor { 983 | return UIColor(rgb: 0x6d4c41) 984 | } 985 | 986 | public static func brown700Color() -> UIColor { 987 | return UIColor(rgb: 0x5d4037) 988 | } 989 | 990 | public static func brown800Color() -> UIColor { 991 | return UIColor(rgb: 0x4e342e) 992 | } 993 | 994 | public static func brown900Color() -> UIColor { 995 | return UIColor(rgb: 0x3e2723) 996 | } 997 | 998 | // MARK: - grey 999 | 1000 | public static func grey50Color() -> UIColor { 1001 | return UIColor(rgb: 0xfafafa) 1002 | } 1003 | 1004 | public static func grey100Color() -> UIColor { 1005 | return UIColor(rgb: 0xf5f5f5) 1006 | } 1007 | 1008 | public static func grey200Color() -> UIColor { 1009 | return UIColor(rgb: 0xeeeeee) 1010 | } 1011 | 1012 | public static func grey300Color() -> UIColor { 1013 | return UIColor(rgb: 0xe0e0e0) 1014 | } 1015 | 1016 | public static func grey400Color() -> UIColor { 1017 | return UIColor(rgb: 0xbdbdbd) 1018 | } 1019 | 1020 | public static func grey500Color() -> UIColor { 1021 | return UIColor(rgb: 0x9e9e9e) 1022 | } 1023 | 1024 | public static func grey600Color() -> UIColor { 1025 | return UIColor(rgb: 0x757575) 1026 | } 1027 | 1028 | public static func grey700Color() -> UIColor { 1029 | return UIColor(rgb: 0x616161) 1030 | } 1031 | 1032 | public static func grey800Color() -> UIColor { 1033 | return UIColor(rgb: 0x424242) 1034 | } 1035 | 1036 | public static func grey900Color() -> UIColor { 1037 | return UIColor(rgb: 0x212121) 1038 | } 1039 | 1040 | // MARK: - blue-grey 1041 | 1042 | public static func blueGrey50Color() -> UIColor { 1043 | return UIColor(rgb: 0xeceff1) 1044 | } 1045 | 1046 | public static func blueGrey100Color() -> UIColor { 1047 | return UIColor(rgb: 0xcfd8dc) 1048 | } 1049 | 1050 | public static func blueGrey200Color() -> UIColor { 1051 | return UIColor(rgb: 0xb0bec5) 1052 | } 1053 | 1054 | public static func blueGrey300Color() -> UIColor { 1055 | return UIColor(rgb: 0x90a4ae) 1056 | } 1057 | 1058 | public static func blueGrey400Color() -> UIColor { 1059 | return UIColor(rgb: 0x78909c) 1060 | } 1061 | 1062 | public static func blueGrey500Color() -> UIColor { 1063 | return UIColor(rgb: 0x607d8b) 1064 | } 1065 | 1066 | public static func blueGrey600Color() -> UIColor { 1067 | return UIColor(rgb: 0x546e7a) 1068 | } 1069 | 1070 | public static func blueGrey700Color() -> UIColor { 1071 | return UIColor(rgb: 0x455a64) 1072 | } 1073 | 1074 | public static func blueGrey800Color() -> UIColor { 1075 | return UIColor(rgb: 0x37474f) 1076 | } 1077 | 1078 | public static func blueGrey900Color() -> UIColor { 1079 | return UIColor(rgb: 0x263238) 1080 | } 1081 | 1082 | // MARK: - black 1083 | 1084 | public static func blackColor() -> UIColor { 1085 | return UIColor(rgb: 0x000000) 1086 | } 1087 | 1088 | // MARK: - white 1089 | 1090 | public static func whiteColor() -> UIColor { 1091 | return UIColor(rgb: 0xffffff) 1092 | } 1093 | } --------------------------------------------------------------------------------