Skip to content

Instantly share code, notes, and snippets.

@seka
Last active May 23, 2017 05:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seka/89e2976ff04c86418253 to your computer and use it in GitHub Desktop.
Save seka/89e2976ff04c86418253 to your computer and use it in GitHub Desktop.
カラーピッカー的なものを作ってみた
//
// ThemeColorPicker.swift
//
// Created by PxP_ss on 2014/11/05.
// Copyright (c) 2014年 pxp_ss. All rights reserved.
//
import UIKit
protocol ThemeColorPickerDelegate {
func themeColorPicker(picker: ThemeColorPicker, themeColor: UIColor)
}
class ThemeColorPicker: UIView {
var delegate: AddUserViewController! = nil
var colors = NSMutableArray()
var themeColor = UIColor()
var selected = UIButton()
/**
* setThemeColor
* param: color
*/
func setThemeColor(color: UIColor!) {
self.themeColor = color
}
/**
* getThemeColor
* returns: self.themeColor
*/
func getThemeColor() -> UIColor {
return self.themeColor
}
/**
* HSVtoHexString
* HSV形式のUIColorをHEX形式のStringにして返す
* param : color hsv形式のUIColor
* returns: hex hex形式のカラーコード(ex.#81F7D8)
*/
func HSVtoHexString(color: UIColor) -> NSString {
let components = CGColorGetComponents(color.CGColor)
var r = NSString(format:"%02X", NSInteger(components[0] * 255))
var g = NSString(format:"%02X", NSInteger(components[1] * 255))
var b = NSString(format:"%02X", NSInteger(components[2] * 255))
return "\(r)\(g)\(b)"
}
/**
* init
* protocolで宣言したイニシャライザinitを利用するために、修飾子requiredが必要
* param : aDecoder
*/
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
/**
* init
* param: frame ビューのサイズを決定する
*/
override init(frame: CGRect) {
super.init(frame: frame)
}
/**
* drawRect
* Pickerに必要なContentを描画
* param: rect
*/
override func drawRect(rect: CGRect) {
for i in 0...8 {
var pixelY = CGFloat(i) / 9
for j in 0...20 {
var pixelX = CGFloat(j) / 19
var color = self.createHSVColor(pixelX, y: pixelY) // 色を決定
colors.addObject(color)
// 作成した色に基づくボタンの作成
var editBtn = UIButton()
editBtn.backgroundColor = color
editBtn.frame = CGRectMake(0, 0, 40, 40)
editBtn.center = CGPointMake(self.center.x + CGFloat((j - 10) * 45), CGFloat(i * 45) + 100)
editBtn.tag = i * 20 + j
editBtn.addTarget(self, action: "selectThemeColor:", forControlEvents: .TouchUpInside)
self.addSubview(editBtn)
self.bringSubviewToFront(editBtn)
}
}
// 決定ボタンの作成
var btn = UIButton()
btn.frame = CGRectMake(0, 0, 220, 60)
btn.center = CGPointMake(self.center.x, 700)
btn.setBackgroundImage(UIImage(named: "titleframe_big_b.png"), forState: .Normal)
btn.setTitle("SetColor_決定", forState: .Normal)
btn.addTarget(self, action: "decideThemeColor:", forControlEvents: .TouchUpInside)
self.addSubview(btn)
}
/**
* createHSVColor
* x, y座標を用いて、HSV形式のUIColorを作成する
* param : x
* param : y
* returns: HSV形式のUIColor
*/
func createHSVColor(x: CGFloat, y: CGFloat) -> UIColor {
let hue :CGFloat = x
let saturation :CGFloat = 1.0 - y * 0.95
let brightness :CGFloat = 1.0
return UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: 1.0)
}
/**
* selectThemeColor
* 作成した色に基づくボタンを押した時のイベント
* param: sender drawRect内におけるeditBtn
*/
func selectThemeColor(sender: UIButton) {
var color = colors[sender.tag] as UIColor
self.setThemeColor(color)
selected.layer.borderWidth = 0
selected = sender as UIButton
sender.layer.borderColor = UIColor.whiteColor().CGColor
sender.layer.borderWidth = 3.0
}
/**
* decideThemeColor
* 決定ボタンを押した際の処理
* param: sender 決定ボタン
*/
func decideThemeColor(sender: UIButton) {
var color = getThemeColor() as UIColor
self.delegate.themeColorPicker(self, themeColor: color)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment