Skip to content

Instantly share code, notes, and snippets.

@Jesse-calkin
Last active April 6, 2023 20:46
Show Gist options
  • Save Jesse-calkin/9e07cb6d9145d04008a21e6528b3c924 to your computer and use it in GitHub Desktop.
Save Jesse-calkin/9e07cb6d9145d04008a21e6528b3c924 to your computer and use it in GitHub Desktop.
import UIKit
public extension UIColor {
public static func checkerboardColor(size: CGSize? = CGSize(width: 100, height: 100), color1: UIColor? = UIColor.grayColor(), color2: UIColor? = UIColor.darkGrayColor()) -> UIColor? {
guard let checkers = CIFilter(name: "CICheckerboardGenerator") else { return nil }
let color0 = CoreImage.CIColor(color: color1!)
let color1 = CoreImage.CIColor(color: color2!)
checkers.setValue(color0, forKey: "inputColor0")
checkers.setValue(color1, forKey: "inputColor1")
checkers.setValue(25.0, forKey: kCIInputWidthKey)
guard let image = checkers.outputImage else { return nil }
let rect = CGRect(origin: CGPointZero, size: size!)
let glContext = EAGLContext(API: EAGLRenderingAPI.OpenGLES2)
let ciContext = CIContext(EAGLContext: glContext)
let patternImage = UIImage(CGImage: ciContext.createCGImage(image, fromRect: rect))
return UIColor(patternImage: patternImage)
}
}
public extension UIImage {
public static func checkerboard(size: CGSize? = CGSize(width: 100, height: 100), color1: UIColor? = UIColor.grayColor(), color2: UIColor? = UIColor.darkGrayColor()) -> UIImage? {
guard let checkers = CIFilter(name: "CICheckerboardGenerator") else { return nil }
let color0 = CIColor(color: color1!)
let color1 = CIColor(color: color2!)
checkers.setValue(color0, forKey: "inputColor0")
checkers.setValue(color1, forKey: "inputColor1")
checkers.setValue(25.0, forKey: kCIInputWidthKey)
guard let image = checkers.outputImage else { return nil }
let rect = CGRect(origin: CGPointZero, size: size!)
let glContext = EAGLContext(API: EAGLRenderingAPI.OpenGLES2)
let ciContext = CIContext(EAGLContext: glContext)
return UIImage(CGImage: ciContext.createCGImage(image, fromRect: rect))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment