EFColorPicker - 一個純 Swift 的輕量級 iOS 顏色選擇器

EFColorPicker 是一個純 Swift 的輕量級 iOS 顏色選擇器,受 MSColorPicker 啓發。git

English Introductiongithub

連接

github.com/EyreFree/EF…swift

概述

iOS 顏色選擇器組件,它可以讓用戶選擇自定義顏色,關鍵特性以下:bash

  • 支持 iPhone 和 iPad
  • 自適應的用戶界面
  • 支持 RGB 和 HSB 兩種顏色模式
  • 比較完善的文檔和註釋
  • 支持 iOS 8.0 (iPhone & iPad) 及更高版本

預覽

iPhone iPad

示例

  1. 利用 git clone 命令下載本倉庫;
  2. 利用 cd 命令切換到 Example 目錄下,執行 pod install 命令;
  3. 隨後打開 EFColorPicker.xcworkspace 編譯便可。

或執行如下命令:ide

git clone git@github.com:EyreFree/EFColorPicker.git; cd EFColorPicker/Example; pod install; open EFColorPicker.xcworkspace
複製代碼

環境

  • iOS 8.0+
  • Xcode 9.0+
  • Swift 4.0+

安裝

EFColorPicker 能夠經過 CocoaPods 進行獲取。只須要在你的 Podfile 中添加以下代碼就能實現引入:post

pod "EFColorPicker"
複製代碼

使用

  1. 首先,須要導入 EFColorPicker 庫:
import EFColorPicker
複製代碼
  1. 接下來,能夠經過純代碼調用:
let colorSelectionController = EFColorSelectionViewController()
let navCtrl = UINavigationController(rootViewController: colorSelectionController)
navCtrl.navigationBar.backgroundColor = UIColor.white
navCtrl.navigationBar.isTranslucent = false
navCtrl.modalPresentationStyle = UIModalPresentationStyle.popover
navCtrl.popoverPresentationController?.delegate = self
navCtrl.popoverPresentationController?.sourceView = sender
navCtrl.popoverPresentationController?.sourceRect = sender.bounds
navCtrl.preferredContentSize = colorSelectionController.view.systemLayoutSizeFitting(
    UILayoutFittingCompressedSize
)

colorSelectionController.delegate = self
colorSelectionController.color = self.view.backgroundColor ?? UIColor.white

if UIUserInterfaceSizeClass.compact == self.traitCollection.horizontalSizeClass {
    let doneBtn: UIBarButtonItem = UIBarButtonItem(
        title: NSLocalizedString("Done", comment: ""),
        style: UIBarButtonItemStyle.done,
        target: self,
        action: #selector(ef_dismissViewController(sender:))
    )
    colorSelectionController.navigationItem.rightBarButtonItem = doneBtn
}
self.present(navCtrl, animated: true, completion: nil)
複製代碼

也能夠經過 Storyboard 調用:ui

if "showPopover" == segue.identifier {
	guard let destNav: UINavigationController = segue.destination as? UINavigationController else {
	    return
	}
	if let size = destNav.visibleViewController?.view.systemLayoutSizeFitting(UILayoutFittingCompressedSize) {
	    destNav.preferredContentSize = size
	}
	destNav.popoverPresentationController?.delegate = self
	if let colorSelectionController = destNav.visibleViewController as? EFColorSelectionViewController {
	    colorSelectionController.delegate = self
	    colorSelectionController.color = self.view.backgroundColor ?? UIColor.white

	    if UIUserInterfaceSizeClass.compact == self.traitCollection.horizontalSizeClass {
	        let doneBtn: UIBarButtonItem = UIBarButtonItem(
	            title: NSLocalizedString("Done", comment: ""),
	            style: UIBarButtonItemStyle.done,
	            target: self,
	            action: #selector(ef_dismissViewController(sender:))
	        )
	        colorSelectionController.navigationItem.rightBarButtonItem = doneBtn
	    }
	}
}
複製代碼

你能夠經過修改 EFColorSelectionViewControllerisColorTextFieldHidden 屬性來控制顏色編輯框的可見性,效果以下:spa

isColorTextFieldHidden: true isColorTextFieldHidden: false

具體可參考示例程序。debug

  1. 最後,不要忘記調用的 ViewController 須要繼承 EFColorSelectionViewControllerDelegate 來及時獲取顏色的變化:
// MARK:- EFColorSelectionViewControllerDelegate
func colorViewController(colorViewCntroller: EFColorSelectionViewController, didChangeColor color: UIColor) {
    self.view.backgroundColor = color

    // TODO: You can do something here when color changed.
    print("New color: " + color.debugDescription)
}
複製代碼

備註

EFColorPicker 的第一個版本從 MSColorPicker 轉換而來,在此對 MSColorPicker 的做者 sgl0v 表示感謝!3d

做者

EyreFree, eyrefree@eyrefree.org

協議

EFQRCode 基於 MIT 協議進行分發和使用,更多信息參見協議文件。


若有任何知識產權、版權問題或理論錯誤,還請指正。 https://juejin.im/post/5a32179ff265da431a43359d 轉載請註明原做者及以上信息。

相關文章
相關標籤/搜索