lonelysoul

Happy share, happy life.

导航

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编辑  收藏  举报