{
  "name": "UIExtensionKit",
  "version": "0.0.2",
  "summary": "Practical method been used in UI Construction.",
  "description": "/**\n Convert UIColor to UIImage\n \n @param color Color to transfer\n @return UImage\n */\n+(UIImage*)imageWithColor:(UIColor*) color;\n\n/**\n Convert UIView to UIImage\n \n @param view view to convert\n @return image from view\n */\n+(UIImage*)imageWithView:(UIView*)view Translucent:(BOOL)translucent;\n\n/**\n Return sub image from given image to adapt device's screen\n \n @param image resouce image\n @return subImage\n */\n+(UIImage *)subFittedImageFromImage:(UIImage *)image;\n\n/**\n Filled given image with color\n \n @param color which color you choosed to draw in picture\n @return UIImage\n */\n+(UIImage *)drawColorInImage:(UIColor *)color;\n\n/**\n Rescale images\n \n @param image original image\n @param size size you wanna scale to\n @return scaledImage\n */\n+ (UIImage *)imageScaledFromImage:(UIImage *)image Size:(CGSize)size;\n\n/**\n Get current tint color, if not setted, returns clear color.\n\n @return UIColor\n */\n+ (UIColor *)tintColor;\n\n/**\n Set current color as tint color\n */\n- (void)setTintColor;\n\n/**\n Set color as tint color\n @param tintColor The tint color\n */\n+ (void)setTintColor:(UIColor *)color;\n\n/**\n Convert UIImage to UIColor\n \n @param pngName name of the Image\n @return UIColor\n */\n+(UIColor *)colorWithImageName:(NSString *)pngName;\n\n/**\n Convert hexString color into UIColor\n \n @param hexColor HexString of the color\n @return UIColor\n */\n+ (UIColor *)colorWithHexString:(NSString *)hexColor;\n\n\n/**\n Convert hexString color into UIColor\n\n @param hexColor HexString of the color\n @param alpha Alpha value of the color\n @return UIColor\n */\n+ (UIColor *)colorWithHexString:(NSString *)hexColor Alpha:(CGFloat)alpha;\n\n\n/**\n Get color with RGB Value\n\n @param RGBValue RGB value\n @return UIColor\n */\n+ (UIColor *)colorWithRGB:(CGFloat)RGBValue;\n\n\n/**\n Get color with RGB Value\n\n @param RGBValue RGB value\n @param alpha Alpha value\n @return UIColor\n */\n+ (UIColor *)colorWithRGB:(CGFloat)RGBValue Alpha:(CGFloat)alpha;\n\n/**\n Get color with RGB Value\n\n @param red Red value\n @param green Green value\n @param blue Blue value\n @return UIColor\n */\n+ (UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue;\n\n\n/**\n Get color with RGB Value\n\n @param red Red value\n @param green Green value\n @param blue Blue value\n @param alpha Alpha value\n @return UIColor\n */\n+ (UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue Alpha:(CGFloat)alpha;",
  "homepage": "https://github.com/dlfkid/UIExtensionKit",
  "license": {
    "type": "MIT",
    "file": "LICENSE"
  },
  "authors": {
    "LeonDeng": "email@address.com"
  },
  "source": {
    "git": "https://github.com/dlfkid/UIExtensionKit.git",
    "tag": "0.0.2"
  },
  "source_files": "UIColorExtensionDemo/UIColorExtensionDemo/ExtensionKit",
  "requires_arc": true,
  "platforms": {
    "ios": "10.0"
  },
  "frameworks": [
    "Foundation",
    "UIKit"
  ]
}
