iOS开发中的一些常用小技巧
来源:互联网 发布:淘宝上哪家紫砂壶好 编辑:程序博客网 时间:2024/05/17 09:18
1. 判断手机号码格式是否正确,利用正则表达式验证
+ (BOOL)isMobileNumber:(NSString *)mobileNum
{
if
(mobileNum.length != 11)
{
return
NO;
}
/**
* 手机号码:
* 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7, 8], 18[0-9], 170[0-9]
* 移动号段: 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705
* 联通号段: 130,131,132,155,156,185,186,145,176,1709
* 电信号段: 133,153,180,181,189,177,1700
*/
NSString *MOBILE = @
"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|70)\d{8}$"
;
/**
* 中国移动:China Mobile
* 134,135,136,137,138,139,150,151,152,157,158,159,182,183,184,187,188,147,178,1705
*/
NSString *CM = @
"(^1(3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])\d{8}$)|(^1705\d{7}$)"
;
/**
* 中国联通:China Unicom
* 130,131,132,155,156,185,186,145,176,1709
*/
NSString *CU = @
"(^1(3[0-2]|4[5]|5[56]|7[6]|8[56])\d{8}$)|(^1709\d{7}$)"
;
/**
* 中国电信:China Telecom
* 133,153,180,181,189,177,1700
*/
NSString *CT = @
"(^1(33|53|77|8[019])\d{8}$)|(^1700\d{7}$)"
;
NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@
"SELF MATCHES %@"
, MOBILE];
NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@
"SELF MATCHES %@"
, CM];
NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@
"SELF MATCHES %@"
, CU];
NSPredicate *regextestct = [NSPredicate predicateWithFormat:@
"SELF MATCHES %@"
, CT];
if
(([regextestmobile evaluateWithObject:mobileNum] == YES)
|| ([regextestcm evaluateWithObject:mobileNum] == YES)
|| ([regextestct evaluateWithObject:mobileNum] == YES)
|| ([regextestcu evaluateWithObject:mobileNum] == YES))
{
return
YES;
}
else
{
return
NO;
}
}
2. 判断邮箱格式是否正确,利用正则表达式验证
+ (BOOL)isAvailableEmail:(NSString *)email
{
NSString *emailRegex = @
"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"
;
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@
"SELF MATCHES %@"
, emailRegex];
return
[emailTest evaluateWithObject:email];
}
UIWindow *window = [[UIApplication sharedApplication].delegate window];
[UIView animateWithDuration:1.0f animations:^{
window.alpha = 0;
} completion:^(BOOL finished) {
exit(0);
}];
}
4. NSArray 快速求总和、最大值、最小值、平均值
+ (NSString *)caculateArray:(NSArray *)array
{
CGFloat sum = [[array valueForKeyPath:@
"@sum.floatValue"
] floatValue];
CGFloat avg = [[array valueForKeyPath:@
"@avg.floatValue"
] floatValue];
CGFloat max =[[array valueForKeyPath:@
"@max.floatValue"
] floatValue];
CGFloat min =[[array valueForKeyPath:@
"@min.floatValue"
] floatValue];
NSLog(@
"%fn%fn%fn%f"
,sum,avg,max,min);
return
[NSString stringWithFormat:@
"%f"
,sum];
}
5. 验证身份证
+ (BOOL)checkIdentityCardNo:(NSString*)value {
value = [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSInteger length =0;
if
(!value) {
return
NO;
}
else
{
length = value.length;
if
(length !=15 && length !=18) {
return
NO;
}
}
// 省份代码
NSArray *areasArray =@[@
"11"
,@
"12"
, @
"13"
,@
"14"
, @
"15"
,@
"21"
, @
"22"
,@
"23"
, @
"31"
,@
"32"
, @
"33"
,@
"34"
, @
"35"
,@
"36"
, @
"37"
,@
"41"
, @
"42"
,@
"43"
, @
"44"
,@
"45"
, @
"46"
,@
"50"
, @
"51"
,@
"52"
, @
"53"
,@
"54"
, @
"61"
,@
"62"
, @
"63"
,@
"64"
, @
"65"
,@
"71"
, @
"81"
,@
"82"
, @
"91"
];
NSString *valueStart2 = [value substringToIndex:2];
BOOL areaFlag =NO;
for
(NSString *areaCode
in
areasArray) {
if
([areaCode isEqualToString:valueStart2]) {
areaFlag =YES;
break
;
}
}
if
(!areaFlag) {
return
false
;
}
NSRegularExpression *regularExpression;
NSUInteger numberofMatch;
NSInteger year =0;
switch
(length) {
case
15:
year = [[value substringWithRange:NSMakeRange(6,2)] integerValue] +1900;
if
(year %4 ==0 || (year 0 ==0 && year %4 ==0)) {
regularExpression = [[NSRegularExpression alloc]initWithPattern:@
"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$"
options:NSRegularExpressionCaseInsensitive
error:nil];
//测试出生日期的合法性
}
else
{
regularExpression = [[NSRegularExpression alloc]initWithPattern:@
"^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$"
options:NSRegularExpressionCaseInsensitive
error:nil];
//测试出生日期的合法性
}
numberofMatch = [regularExpression numberOfMatchesInString:value options:NSMatchingReportProgress
range:NSMakeRange(0, value.length)];
if
(numberofMatch >0) {
return
YES;
}
else
{
return
NO;
}
case
18:
year = [value substringWithRange:NSMakeRange(6,4)].intValue;
if
(year %4 ==0 || (year 0 ==0 && year %4 ==0)) {
regularExpression = [[NSRegularExpression alloc]initWithPattern:@
"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$"
options:NSRegularExpressionCaseInsensitive error:nil];
//测试出生日期的合法性
}
else
{
regularExpression = [[NSRegularExpression alloc]initWithPattern:@
"^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$"
options:NSRegularExpressionCaseInsensitive error:nil];
//测试出生日期的合法性
}
numberofMatch = [regularExpression numberOfMatchesInString:value options:NSMatchingReportProgress range:NSMakeRange(0, value.length)];
if
(numberofMatch >0) {
int S = ([value substringWithRange:NSMakeRange(0,1)].intValue + [value substringWithRange:NSMakeRange(10,1)].intValue) *7 + ([value substringWithRange:NSMakeRange(1,1)].intValue + [value substringWithRange:NSMakeRange(11,1)].intValue) *9 + ([value substringWithRange:NSMakeRange(2,1)].intValue + [value substringWithRange:NSMakeRange(12,1)].intValue) *10 + ([value substringWithRange:NSMakeRange(3,1)].intValue + [value substringWithRange:NSMakeRange(13,1)].intValue) *5 + ([value substringWithRange:NSMakeRange(4,1)].intValue + [value substringWithRange:NSMakeRange(14,1)].intValue) *8 + ([value substringWithRange:NSMakeRange(5,1)].intValue + [value substringWithRange:NSMakeRange(15,1)].intValue) *4 + ([value substringWithRange:NSMakeRange(6,1)].intValue + [value substringWithRange:NSMakeRange(16,1)].intValue) *2 + [value substringWithRange:NSMakeRange(7,1)].intValue *1 + [value substringWithRange:NSMakeRange(8,1)].intValue *6 + [value substringWithRange:NSMakeRange(9,1)].intValue *3;
int Y = S ;
NSString *M =@
"F"
;
NSString *JYM =@
"10X98765432"
;
M = [JYM substringWithRange:NSMakeRange(Y,1)];
// 判断校验位
if
([M isEqualToString:[value substringWithRange:NSMakeRange(17,1)]]) {
return
YES;
// 检测ID的校验位
}
else
{
return
NO;
}
}
else
{
return
NO;
}
default
:
return
false
;
}
}
CGColorSpaceRef colorSpaceRef =CGColorSpaceCreateDeviceRGB();
CGColorRef color =CGColorCreate(colorSpaceRef, (CGFloat[]){172.0/255.0,172.0/255.0,172.0/255.0,1});
[dazhe1.layersetBorderColor:color];
[dazhe1.layersetMasksToBounds:YES];
[dazhe1.layersetBorderWidth:0.5];
7.程序内调用safari跳转URL链接
NSString *urlString =@"http://www.baidu.com";
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];
8.获取当前设备的唯一标识
NSUUID *identifierForVendor = [[UIDevicecurrentDevice]identifierForVendor];
NSString *deviceId = [identifierForVendorUUIDString];
9. Release 模式下禁用 NSLog
因为NSLog的输出还是比较消耗系统资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉。
我们可以在发布版本前先把所有NSLog语句注释掉,等以后要调试时,再取消这些注释,这实在是一件无趣而耗时的事!还好,还有更优雅的解决方法,就是在项目的prefix.pch文件里加入下面一段代码,加入后,NSLog就只在Debug下有输出,Release下不输出了。
#ifndef __OPTIMIZE__
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...) {}
#endif
10.UIImage转NSData
NSData *imageData =UIImageJPEGRepresentation([selfimageWithImageSimple:resultscaledToSize:CGSizeMake(200,200)],0.5);
11.xib添加约束以后,添加动画没有效果
只需要在修改约束后面紧跟着调用[父控件.view layoutIfNeeded];就可以了。
12.动画(弹簧效果)
// [UIView animateWithDuration:0.5 delay:1 options:UIViewAnimationOptionLayoutSubviews animations:^{
// self.iconImageView.transform = CGAffineTransformMakeScale(4.5, 4.5);
// } completion:^(BOOL finished) {
// [UIView animateWithDuration:0.1 animations:^{
// self.iconImageView.transform = CGAffineTransformMakeScale(4, 4);
// } completion:^(BOOL finished) {
// [UIView animateWithDuration:0.1 animations:^{
// self.iconImageView.transform = CGAffineTransformMakeScale(3.8, 3.8);
// } completion:^(BOOL finished) {
// [UIView animateWithDuration:0.1 animations:^{
// self.iconImageView.transform = CGAffineTransformMakeScale(4, 4);
// } completion:^(BOOL finished) {
// [UIView animateWithDuration:0.1 animations:^{
// self.iconImageView.transform = CGAffineTransformMakeScale(3.8, 3.8);
// } completion:^(BOOL finished) {
// [UIView animateWithDuration:0.1 animations:^{
// self.iconImageView.transform = CGAffineTransformMakeScale(3.9, 3.9);
// } completion:^(BOOL finished) {
//
// }];
//
// }];
//
// }];
//
// }];
//
// }];
// }];
[UIViewanimateWithDuration:0.5delay:1usingSpringWithDamping:0.4initialSpringVelocity:2.0options:UIViewAnimationOptionCurveEaseOutanimations:^{
self.iconImageView.transform = CGAffineTransformMakeScale(4.5,4.5);
} completion:^(BOOL finished) {
}];
- iOS开发中的一些常用小技巧
- iOS开发中的一些常用小技巧
- iOS开发:开发中的一些小技巧
- iOS - 开发中的一些小技巧:
- iOS开发中的一些小技巧
- ios开发教程中的一些小技巧
- ios开发中的一些小技巧
- iOS-iphone开发中的 一些小技巧
- iOS开发中的一些小技巧
- 关于IOS 开发 中的一些小技巧
- ios开发中的一些小技巧
- ios开发中的一些小技巧
- ios中的一些小技巧
- IOS开发一些小技巧
- 为您讲述ios开发教程中的一些小技巧
- ios 开发中的一些小技巧(会持续完善)
- iOS 开发中的一些小问题和技巧
- ios开发中的小技巧
- 第四篇 小曹学spring--Spring AOP 基础
- aws 常用功能说明
- 【web】自定义jsp标签(下拉框数据字典)
- 201606中通笔试题
- mac mysql 安装
- iOS开发中的一些常用小技巧
- 编写高质量的代码——从命名入手
- [JS]防抖和节流
- selenium+java+testNG+pageObject深入理解自动化测试框架
- 安装cocoapods遇到error: RPC failed; curl 56 SSLRead() return error -36问题
- Spring AOP 实现系统操作日志记录
- web.config文件到底能干嘛
- Bootstrap 模态对话框只加载一次 remote 数据的解决办法
- 极光 —— 一种物理现象