iOS开发中的遇到的一些小技术缩短开发周期(持续收集)
1、用UIColor做成UIImage,我现在用于iOS7的UIButton上,扁平化风格:
+ (UIImage *)imageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; }
2、一般情况,我们都会使用自己的颜色,下面这个宏用来设置RGB颜色非常方便:
// 十六进制->十进制
#define kUIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
#define kRGBColor(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]
#define kRGBAColor(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
#define kBACKGROUND_COLOR [UIColor colorWithRed:242.0/255.0 green:236.0/255.0 blue:231.0/255.0 alpha:1.0] // 背景色
#define kCLEAR_COLOR [UIColor clearColor] // 清除颜色
3、使用正则表达式判断输入的字符串的合法性条件
3.1 验证邮箱合法性
- (BOOL)isValidateEmail:(NSString *)str { NSString *regex = @"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-zA-Z]{2,6})\\b"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:str]; }
3.2 验证是否全为数字
- (BOOL)isNumber:(NSString *)str { NSString *regex = @"^[0-9]*$"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:str]; }
3.3 验证密码:6—16位,只能包含字符、数字和下划线。
- (BOOL)isValidatePassword:(NSString *)str { NSString *regex = @"^[\\w\\d_]{6,16}$"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:str]; }
3.4 验证是否为电话号码
- (BOOL)isPhoneNumber:(NSString *)str { NSString *regex = @"^(\(\\d{3,4}\\)|\\d{3,4}-)?\\d{7,8}$"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; return [predicate evaluateWithObject:str]; }
4、关于NSLog的控制
// 调试模式下输出NSLog,发布后不再输出 #ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_ARGS__) #else #define NSLog(...) {} #endif // DEBUG模式下打印日志,当前行 #ifdef DEBUG #define MLog(fmt, ...) NSLog(@"%s [Line %d]" fmt, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else #define MLog(...) #endif
// 普通NSLog打印输出在Console中包含了包含了输出时间、工程名等,如下
2014-01-22 11:13:18.247 StudyDefine[945:70b] {{0, 0}, {320, 568}}
// 然而有些时候不想在控制台输出那么多东西,或者让自己能多看一些重要的内容,我们不需要输出比如时间、工程名等一大串字符串,
// 我们可以定义一个宏,只输出自己字符串内容,如下:
#define CLog(nsstring) fprintf(stderr, "%s", [nsstring UTF8String])
// 输出结果在Console中只输出如下内容:
{{0, 0}, {320, 568}}
猫神blog中讲解了宏定义的原理以及详细介绍如何定义宏
5、获取机器信息
// 获取系统版本 #define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue] // 获取设备版本 #define CURRENT_SYSTEM_VERSION [[UIDevice currentDevice] systemVersion] // 判断是否 Retina屏、设备是否是iPhone 5、是否是iPad #define IS_RETINA ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO) #define IS_IPHONE5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO) #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >=7.0 ? YES : NO)
#define kScreenSize [UIScreen mainScreen].bounds.size // 屏幕的size (4寸屏为{320,568},3.5寸屏为{320,480})
#define kApplecationSize [UIScreen mainScreen].applicationFrame.size // 应用程序的size(出去状态栏)height减20
#define IS_3_5_Inch (kScreenSize.height == 480 ? YES : NO) // 判断是否为3.5寸屏
#define IS_4_Inch (kScreenSize.height == 568 ? YES : NO) // 判断是否为4寸屏
// 判断是真机还是模拟器 #if TARGET_OS_IPHONE // iPhone Device #endif #if TARGET_IPHONE_SIMULATOR // iPhone Simulator #endif
6、截取屏幕
可以把当前View的layer,输出到一个ImageContext中,然后利用这个ImageContext得到UIImage
+(UIImage*)captureView:(UIView *)theView { CGRect rect = theView.frame; UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); [theView.layer renderInContext:context]; UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; }
7、其他一些Tips
1、在xcode5中判断是否开启ARC
#if __has_feature(objc_arc) // ARC #else // No ARC #endif
祝您愉快开心 ^_^
posted on 2013-11-18 22:49 lonelysoul 阅读(263) 评论(0) 编辑 收藏 举报