引入
在App的開發中,效率占有很重要的地位。作為開發者如何能有在有限的時間内開發出一個優秀的App呢?答案很明顯,那就是要求開發者能運用一些現有其他開發者留下的一些功能子產品和小工具代碼。今天本部落格就介紹一個開發者常用的工具類 DFBox。 該類涵有26中方法。該工具類還在一直添加,請盡情關注!!!
一:DFBox的.h 檔案
//
// DFBox.h
// DevelopmentFunctionBox
//
// Created by MAC on 2017/9/25.
// Copyright © 2017年 NetworkCode小賤. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface DFBox : NSObject
@property(nonatomic,strong) NSString * dddd;
@property(nonatomic,strong) NSString * f;
@property(nonatomic,strong) NSString * ddwdd;
@property(nonatomic,strong) NSString * ddfdd;
/**
建立一個單利對象
*/
+(instancetype)developFunctionBox;
/**
擷取作者資訊
*/
-(void)getAuthorInfo;
/**
禁止手機的休眠
@isDormancy YES:不休眠;NO:處于正常休眠狀态
*/
-(void)setPhoneToSleep:(BOOL)isDormancy;
/**
除去數組中重複的對象
@array 要去除重複的對象
*/
-(NSArray*)removeDuplicateObjectsOfArray:(NSArray*)array;
/**
給一個View截圖
@view 要截圖的對象
*/
-(UIImage*)screenshotToView:(UIView*)view ;
/**
顔色轉圖像
@color 要轉換的顔色
*/
-(UIImage*)colorConvertedToImage:(UIColor*)color ;
/**
弧度轉角度或者角度轉弧度
@isRadianToAngles YES為弧度轉角度;NO為角度轉弧度。
*/
-(CGFloat)radianToAngles:(CGFloat)value with:(BOOL)isRadianToAngles;
/**
擷取随機顔色
*/
-(UIColor*)getRandomColor;
/**
改變UITextField的placeholder的字型顔色和大小
@color 顔色
@fontSize 字型大小
@textField 要改變的對象
*/
-(void)changeTextFieldPlacehoderColor:(UIColor*)color withPlacehoderFont:(CGFloat)fontSize with:(UITextField*)textField;
/**
收起鍵盤
*/
-(void)packUpKeyboard;
/**
擷取目前是什麼類型的手機
*/
-(NSString*)getPhoneType;
/**
擷取圖像的擴充名
@imageData 圖像資料
*/
-(NSString*)getImageExtensionName:(NSData*)imageData;
/**
擷取一個類的所有屬性
@className 類的名字
*/
-(void)getPropertiesOfClass:(const char*)className;
/**
繪制圓角圖像
@image 要變圓角的圖像
*/
-(UIImage*)circleImage:(UIImage*)image;
/**
圖像的拉伸
@image 拉伸的對象
@edgeInset 拉伸的範圍
*/
-(UIImage*)tensileImage:(UIImage*)image withEdgeInset:(UIEdgeInsets)edgeInset;
/**
JSON字元串轉字典
@jsonStr JSON字元串對象
*/
-(NSDictionary*)jsonToDictionary:(NSString*)jsonStr;
/**
判斷身份證号是否合法
@idNumberStr
*/
-(BOOL)judgmentIdNumberOflegitimacy:(NSString*)idNumberStr;
/**
判斷圖像是否有透明度通道
@image 判斷的對象
*/
-(BOOL)judgmentAlphaOfImage:(UIImage*)image;
/**
根據螢幕大小擷取相應的圖像
@imageName 要加載的圖像的名字
*/
-(UIImage*)imageWith:(NSString*)imageName;
/**
移除字元串中的空格
@doString 要處理的字元串
*/
-(NSString*)removeSpaceAndNewline:(NSString*)doString;
/**
判斷一個字元串是否為空
@doString 要判斷的字元串
*/
-(BOOL)isEqualToNil:(NSString*)doString;
/**
删除某個View的所有子視圖
@ doView 要處理的View
*/
-(void)removeSonsformView:(UIView*)doView;
/**
讓View 的背景色漸變
@doView 要漸變的View
*/
-(void)gradientViewOfBackGroundColor:(UIView*)doView withColors:(NSArray*)colors;
/**
給某個View的一個角添加圓角
@doView 要添加的圓角的View
*/
-(void)addRadiiOfView:(UIView*)doView byRoundingCorners:(UIRectCorner)corners withRadii:(CGFloat)radii;
/**
擷取View在Window上的位置
@doView 要擷取位置View
*/
-(CGPoint)getPointOfViewInWindow:(UIView*)doView;
/**
在View上添加虛線
@doView 要添加的虛線的View
@lineColor 線的顔色
@lineInterval 虛線間隔數組
@lineColor 虛線的顔色
@lineWidth 虛線的寬度
@point1、point2 虛線的起始和結束位置
*/
-(void)addDottedLineToView:(UIView*)doView byLineInterval:(NSArray*)lineInterval withlineColor:(UIColor*)lineColor withLineWidth:(CGFloat)lineWidth loctionStart:(CGPoint)point1 loctionEnd:(CGPoint)point2;
/**
擷取一個View所在的控制器
@doView 要擷取控制器的對象
*/
-(UIViewController*)belongViewController:(UIView*)doView;
@end
二:DFBox類的.m檔案内容
//
// DFBox.m
// DevelopmentFunctionBox
//
// Created by MAC on 2017/9/25.
// Copyright © 2017年 NetworkCode小賤. All rights reserved.
//
#import "DFBox.h"
#import <sys/utsname.h>
#import <objc/runtime.h>
static DFBox * _dFBox = nil ;
@implementation DFBox
/**
建立一個單利對象
*/
+(instancetype)developFunctionBox{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_dFBox = [[self alloc]init] ;
});
return _dFBox ;
}
/**
重寫init
*/
-(id)init{
if (_dFBox) {
return self;
}else{
_dFBox = [super init];
}
return _dFBox ;
}
/**
copy
*/
-(id)copy{
if (_dFBox) {
return self;
}else{
_dFBox = [super copy];
}
return _dFBox ;
}
/**
擷取作者資訊
*/
-(void)getAuthorInfo{
NSDictionary * authorinfo = @{@"AuthorName":@"周雙建",@"phoneNumber":@"18801210281",@"QQ":@"1542100658"};
NSLog(@"%@",authorinfo);
}
#pragma mark 禁止手機的休眠
/**
@isDormancy YES:不休眠;NO:處于正常休眠狀态
*/
-(void)setPhoneToSleep:(BOOL)isDormancy{
[UIApplication sharedApplication].idleTimerDisabled = isDormancy;
}
#pragma mark 除去數組中重複的對象
-(NSArray*)removeDuplicateObjectsOfArray:(NSArray*)array{
// 判斷給定的對象否為空
if (array==nil) return nil;
// 不要忘記 ‘@’ 符号
return [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
}
#pragma mark 給一個View截圖
/**
@view 要截圖的對象
*/
-(UIImage*)screenshotToView:(UIView*)view {
if (view) {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
return nil ;
}
#pragma mark 顔色轉圖像
/**
@color 要轉換的顔色
*/
-(UIImage*)colorConvertedToImage:(UIColor*)color {
if(color){
CGRect rect = CGRectMake(0, 0, 1.0, 1.0);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext() ;
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
UIImage * image = UIGraphicsGetImageFromCurrentImageContext() ;
UIGraphicsEndImageContext() ;
return image ;
}
return nil;
}
#pragma mark 弧度轉角度或者角度轉弧度
/**
@isRadianToAngles YES為弧度轉角度;NO為角度轉弧度。
*/
-(CGFloat)radianToAngles:(CGFloat)value with:(BOOL)isRadianToAngles{
if (isRadianToAngles) {
return (value * 180.0)/M_PI;
}else{
return value * M_PI /180.0;
}
}
#pragma mark 擷取随機顔色
-(UIColor*)getRandomColor{
NSInteger rValue = arc4random() % 255;
NSInteger gValue = arc4random() % 255;
NSInteger bValue = arc4random() % 255;
return [UIColor colorWithRed:rValue /255.0 green:gValue /255.0 blue:bValue /255.0 alpha:1.0f];
}
#pragma mark 改變UITextField的placeholder的字型顔色和大小
/**
@color 顔色
@fontSize 字型大小
@textField 要改變的對象
*/
-(void)changeTextFieldPlacehoderColor:(UIColor*)color withPlacehoderFont:(CGFloat)fontSize with:(UITextField*)textField{
if (textField==nil) return;
if (color) {
[textField setValue:color forKey:@"_placeholderLabel.textColor"];
}
if (fontSize!=0) {
[textField setValue:[UIFont systemFontOfSize:fontSize] forKey:@"_placeholderLabel.font"];
}
}
#pragma mark 收起鍵盤
-(void)packUpKeyboard{
[[UIApplication sharedApplication].keyWindow endEditing:YES];
}
#pragma mark 擷取目前是什麼類型的手機
// 不要忘記引入 ‘sys/utsname.h’頭檔案
-(NSString*)getPhoneType{
struct utsname systemInfo ;
uname(&systemInfo);
NSString * platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([platform isEqualToString:@"iPhone9,1"]) return @"國行、日版、港行iPhone 7";
if ([platform isEqualToString:@"iPhone9,2"]) return @"港行、國行iPhone 7 Plus";
if ([platform isEqualToString:@"iPhone9,3"]) return @"美版、台版iPhone 7";
if ([platform isEqualToString:@"iPhone9,4"]) return @"美版、台版iPhone 7 Plus";
if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4";
if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air";
if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G";
if ([platform isEqualToString:@"i386"]) return @"iPhone Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"iPhone Simulator";
return platform;
}
#pragma mark 擷取圖像的擴充名
/**
@imageData 圖像資料
*/
-(NSString*)getImageExtensionName:(NSData*)imageData{
if(imageData==nil) return nil;
uint8_t name ;
[imageData getBytes:&name length:1];
switch (name) {
case 0xFF:
return @"jpg";
break;
case 0x89:
return @"png";
break;
case 0x47:
return @"gif";
break;
case '%':
return @"pdf";
break;
default:
return @"webp" ;
break;
}
}
#pragma mark 擷取一個類的所有屬性
/**
@className 類的名字
*/
-(void)getPropertiesOfClass:(const char*)className{
if (className==nil) return ;
id class = objc_getClass(className);
unsigned int count,i;
objc_property_t * properties = class_copyPropertyList(class, &count);
for (i=0; i<count; i++) {
objc_property_t property = properties[i];
fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));
}
}
#pragma mark 繪制圓角圖像
/**
@image 要變圓角的圖像
*/
-(UIImage*)circleImage:(UIImage*)image{
if(image==nil) return nil;
// 建立上下文
UIGraphicsBeginImageContextWithOptions(image.size, NO, 1.0);
// 擷取上下文
CGContextRef contextRef = UIGraphicsGetCurrentContext() ;
// 添加圓形區域
CGContextAddEllipseInRect(contextRef, CGRectMake(0, 0, image.size.width, image.size.height));
// 裁剪
CGContextClip(contextRef);
// 繪制圖像
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
// 擷取圖像
UIImage * imageCircle = UIGraphicsGetImageFromCurrentImageContext();
// 關閉上下文
UIGraphicsEndImageContext();
return imageCircle;
}
#pragma mark 圖像的拉伸
/**
@image 拉伸的對象
@edgeInset 拉伸的範圍
*/
-(UIImage*)tensileImage:(UIImage*)image withEdgeInset:(UIEdgeInsets)edgeInset{
if (image==nil) {
return image;
}
return [image resizableImageWithCapInsets:edgeInset resizingMode:UIImageResizingModeStretch];
}
#pragma mark JSON字元串轉字典
/**
@jsonStr JSON字元串對象
*/
-(NSDictionary*)jsonToDictionary:(NSString*)jsonStr{
if (jsonStr==nil) return nil;
NSData * data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
return [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
}
#pragma mark 判斷身份證号是否合法
/**
@idNumberStr
*/
-(BOOL)judgmentIdNumberOflegitimacy:(NSString*)idNumberStr{
if (idNumberStr==nil) return NO;
// 建立條件語句
NSString * regex = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
// 謂詞查詢
NSPredicate * identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [identityCardPredicate evaluateWithObject:idNumberStr];
}
#pragma mark 判斷圖像是否有透明度通道
/**
@image 判斷的對象
*/
-(BOOL)judgmentAlphaOfImage:(UIImage*)image{
if (image==nil) return NO;
CGImageAlphaInfo imageInfo = CGImageGetAlphaInfo(image.CGImage);
return (imageInfo == kCGImageAlphaLast || imageInfo == kCGImageAlphaFirst || kCGImageAlphaPremultipliedLast );
}
#pragma mark 根據螢幕大小擷取相應的圖像
/**
@imageName 要加載的圖像的名字
*/
-(UIImage*)imageWith:(NSString*)imageName{
if (imageName==nil) return nil;
NSString * nameStr = [imageName componentsSeparatedByString:@"."].firstObject;
// 判斷螢幕分比率
if ([UIScreen mainScreen].scale ==2.0) {
[nameStr stringByAppendingString:@"[email protected]"];
}else if ([UIScreen mainScreen].scale == 3.0){
[nameStr stringByAppendingString:@"[email protected]"];
}
NSString * imagePath = [[NSBundle mainBundle] pathForResource:nameStr ofType:@"png"];
if (imageName==nil) {
return nil ;
}else{
return [UIImage imageWithContentsOfFile:imagePath];
}
}
#pragma mark 移除字元串中的空格
/**
@doString 要處理的字元串
*/
-(NSString*)removeSpaceAndNewline:(NSString*)doString{
if (doString==nil) return nil;
NSString * tempStr = [doString stringByReplacingOccurrencesOfString:@" " withString:@""];
tempStr = [tempStr stringByReplacingOccurrencesOfString:@"\r" withString:@""];
tempStr = [tempStr stringByReplacingOccurrencesOfString:@"\n" withString:@""];
return tempStr;
}
#pragma mark 判斷一個字元串是否為空
/**
@doString 要判斷的字元串
*/
-(BOOL)isEqualToNil:(NSString*)doString{
return doString.length <=0 || doString==nil || [doString isEqualToString:@""];
}
#pragma mark 删除某個View的所有子視圖
/**
@ doView 要處理的View
*/
-(void)removeSonsformView:(UIView*)doView{
if (doView==nil) return;
[[doView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
}
#pragma makr 讓View 的背景色漸變
/**
@doView 要漸變的View
*/
-(void)gradientViewOfBackGroundColor:(UIView*)doView withColors:(NSArray*)colors
{
if (doView==nil) return;
CAGradientLayer * gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = doView.bounds;
gradientLayer.colors = colors;
[doView.layer insertSublayer:gradientLayer atIndex:0];
}
#pragma mark 給某個View的一個角添加圓角
/**
@doView 要添加的圓角的View
*/
-(void)addRadiiOfView:(UIView*)doView byRoundingCorners:(UIRectCorner)corners withRadii:(CGFloat)radii{
if (doView==nil) return;
UIBezierPath * bzPath = [UIBezierPath bezierPathWithRoundedRect:doView.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(radii,radii)];
CAShapeLayer * shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = doView.bounds;
shapeLayer.path = bzPath.CGPath;
doView.layer.mask = shapeLayer;
}
#pragma mark 擷取View在Window上的位置
/**
@doView 要擷取位置View
*/
-(CGPoint)getPointOfViewInWindow:(UIView*)doView{
if (doView==nil) return CGPointZero;
return [doView convertPoint:CGPointMake(0, 0) fromView:[UIApplication sharedApplication].windows.lastObject];
}
#pragma mark 在View上添加虛線
/**
@doView 要添加的虛線的View
@lineColor 線的顔色
*/
-(void)addDottedLineToView:(UIView*)doView byLineInterval:(NSArray*)lineInterval withlineColor:(UIColor*)lineColor withLineWidth:(CGFloat)lineWidth loctionStart:(CGPoint)point1 loctionEnd:(CGPoint)point2{
if (doView==nil) return;
CAShapeLayer * shapeLayer = [CAShapeLayer layer];
shapeLayer.lineWidth = lineWidth;
shapeLayer.lineDashPattern = lineInterval ;
shapeLayer.fillColor = nil;
shapeLayer.strokeColor = lineColor.CGColor ;
UIBezierPath * bzPath = [UIBezierPath bezierPath];
[bzPath moveToPoint:point1];
[bzPath addLineToPoint:point2];
shapeLayer.path = bzPath.CGPath ;
[doView.layer addSublayer:shapeLayer];
}
#pragma makr 擷取一個View所在的控制器
/**
@doView 要擷取控制器的對象
*/
-(UIViewController*)belongViewController:(UIView*)doView{
if (doView==nil) return nil;
for (UIView * next = [doView superview]; next; next = next.superview) {
UIResponder * nextRes = [next nextResponder];
if ([nextRes isKindOfClass:[UIViewController class]]) {
return (UIViewController*)nextRes ;
}
}
return nil;
}
@end
該類持續更新,請盡情關注!!!!!