App Develop

[Swift]UIImageを染める

UIImageを染める

let image:UIImage? = UIImage(named: "input_iconTest")
let iv:UIImageView = UIImageView(image:image!)
iv.paintColor = "ff0000"
self.view.addSubview(iv)

extension UIImageView {
    class func getUIColorByColorHex(colorHex:String) -> UIColor{
        let colorScanner:NSScanner = NSScanner(string: colorHex)
        var color:UInt32 = 0
        colorScanner.scanHexInt(&color)
        let r:CGFloat = CGFloat((color & 0xFF0000) >> 16) / CGFloat(255.0);
        let g:CGFloat = CGFloat((color & 0x00FF00) >> 8)  / CGFloat(255.0);
        let b:CGFloat = CGFloat(color & 0x0000FF) / CGFloat(255.0);
        return UIColor(red: r, green: g, blue: b, alpha: 1.0)
    }
    var paintColor:String{
        get{
            return ""
        }
        set{
            if self.image != nil {
                if newValue == "" {
                    self.image = self.image!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
                }else{
                    self.tintColor = UIImageView.getUIColorByColorHex(newValue)
                    self.image = self.image!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
                }
            }
        }
    }
}

[Swift]線を描く

線を描く

let image:UIImage = self.getUIImageOfVerticalGrid(self.view.frame.size, start: 0.0, lineInterval: 10.0, lineThickness: 1.0, lineColorHex: "ff0000")
let iv:UIImageView = UIImageView(image:image)
iv.contentMode = UIViewContentMode.ScaleAspectFit
iv.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)
self.view.addSubview(iv)

func getUIImageOfVerticalGrid(size:CGSize, start:CGFloat=0.0, lineInterval:CGFloat=44.0, lineThickness:CGFloat=1.0, lineColorHex:String="D6D6D6") -> UIImage {
    return self.getUIImageOfGrid(false, size: size, start: start, lineInterval: lineInterval, lineThickness: lineThickness, lineColorHex: lineColorHex)
}
func getUIImageOfGrid(horizontal:Bool, size:CGSize, start:CGFloat=0.0, lineInterval:CGFloat=44.0, lineThickness:CGFloat=1.0, lineColorHex:String="D6D6D6") -> UIImage {
    let scale:CGFloat = UIScreen.mainScreen().scale
    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    let context:CGContextRef = UIGraphicsGetCurrentContext()
    CGContextSetLineWidth(context, 0.0)
    let color:rgbTuple = self.getColorTupleByColorHex(lineColorHex)
    CGContextSetRGBStrokeColor(context, color.r,color.g,color.b, 1.0)
    CGContextSetRGBFillColor(context, color.r,color.g,color.b, 1.0)
    let w:CGFloat = (horizontal) ? size.width : lineThickness / scale
    let h:CGFloat = (horizontal) ? lineThickness / scale : size.height
    var currentPosition:CGFloat = start
    let maxPosition:CGFloat = (horizontal) ? size.height : size.width
    while currentPosition < maxPosition {
        let x:CGFloat = (horizontal) ? 0.0 : currentPosition
        let y:CGFloat = (horizontal) ? currentPosition : 0.0
        CGContextFillRect(context, CGRectMake( x, y, w, h))
        currentPosition += lineInterval
    }
    let image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}
func getColorTupleByColorHex(colorHex:String, alpha:CGFloat=1.0) -> (r:CGFloat,g:CGFloat,b:CGFloat){
    let colorScanner:NSScanner = NSScanner(string: colorHex)
    var color:UInt32 = 0
    colorScanner.scanHexInt(&color)
    let r:CGFloat = CGFloat((color & 0xFF0000) >> 16) / CGFloat(255.0);
    let g:CGFloat = CGFloat((color & 0x00FF00) >> 8)  / CGFloat(255.0);
    let b:CGFloat = CGFloat(color & 0x0000FF) / CGFloat(255.0);
    return (r: r, g: g, b: b)
}

結果
iOS Simulator Screen Shot 2015.07.22 16.09.11

[Swift]split

split

let t:String = "yyyy-MM-dd HH:mm:ss"
//let tmp:[String] = split(t, {$0 == "-" || $0 == " " || $0 == ":"}) //この方法でもよい
let tmp:[String] = split(t, {contains(["-"," ",":"],$0)})
println(tmp)

出力結果

[yyyy, MM, dd, HH, mm, ss]

[Swift]rgbから16進数文字列取得

rgbから16進数文字列取得

func getColorHexByColorTuple(color:(r:CGFloat,g:CGFloat,b:CGFloat)) -> String{
    return NSString(format: "%02x%02x%02x", Int(color.r*255.0),Int(color.g*255.0),Int(color.b*255.0))
}

[Swift]UIColorからrgb取得

UIColorからrgb値取得

func getColorTupleByUIColor(color:UIColor) -> (r:CGFloat,g:CGFloat,b:CGFloat){
    var r:CGFloat = 0
    var g:CGFloat = 0
    var b:CGFloat = 0
    var a:CGFloat = 0
    color.getRed(&r, green: &g, blue: &b, alpha: &a)
    return (r: r, g: g, b: b)
}

[Swift]16進数文字列からrgb取得

16進数文字列からrgb取得

class func getColorTupleByColorHex(colorHex:String) -> (r:CGFloat,g:CGFloat,b:CGFloat){
    let colorScanner:NSScanner = NSScanner(string: colorHex)
    var color:UInt32 = 0
    colorScanner.scanHexInt(&color)
    let r:CGFloat = CGFloat((color & 0xFF0000) >> 16) / CGFloat(255.0);
    let g:CGFloat = CGFloat((color & 0x00FF00) >> 8)  / CGFloat(255.0);
    let b:CGFloat = CGFloat(color & 0x0000FF) / CGFloat(255.0);
    return (r: r, g: g, b: b)
}

[Swift]enumerate

enumerate

var values:[[AnyObject]] = []
for (index:Int,list:[AnyObject]) in enumerate(self.values) {
    for var i=0;i<list.count;i+=3 {
        //処理
    }
}

[Swift]クロージャ#2

クロージャ#2

定義

private func getSampleText(message:String,callBackClosure:(Bool,String)->Void) {
    //do something
    callBackClosure(true,"メッセージ:\(message)")
}

実行

self.getSampleText("ぽえーん", callBackClosure: { (result, resultMessage) -> Void in
    println("result:\(result) message:\(resultMessage)")
})