iOS 开发中会用到的一些小技巧

以下内容是作者在实际开发中所总结的,主要列举了一些实用小技巧,也希望在实际开发中能够帮到你。

1 设置控件的圆角:

myView.layer.cornerRadius = 6; 
myView.layer.masksToBounds = YES;
transform = CGAffineTransformRotate(manImageView.transform,M_PI/6.0);
manImageView.frame=CGRectMake(100,100, 120,100);
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
transform = CGAffineTransformScale(manImageView.transform,1.2,1.2);
transform=CGAffineTransformInvert(manImageView.transform);

2 设置控件的阴影:

myView.layer.shadowColor = [UIColor blackColor].CGColor;
myView.layer.shadowOffset = CGSizeMake(0, 0);
myView.layer.shadowOpacity = 1;

3 换行连接字符:

NSString *str = @"数不清的漫山花朵"\
"给这座大山添加了不少情趣";
NSLog(@"%@",str);

4 判断一个字符串中是否包含另外一个字符串:

NSString *str1 = @"abcqwqwq";
NSString *str2 = @"abc";
NSLog(@"%@", [str1 rangeOfString:str2].length != 0 ? @"包含" : @"不包含");

5 获取plist文件的数据:

NSString *path = [[NSBundle mainBundle]pathForResource:@"heros" ofType:@"plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:path];

6 nil文件的获取:

APPCell *cell = [[NSBundle mainBundle]loadNibNamed:@"" owner:nil options:nil].lastObject;

7 获取屏幕点击坐标

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
 UITouch *touch = [touches anyObject];
 CGPoint point = [touch locationInView:touch.view];
 NSLog(@"%@",NSStringFromCGPoint(point));
}

8 系统偏好储存方式:

//1. NSUserDefaults简单实用:
// 创建偏好对象
 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 // 存值
 [defaults setObject:@"daojiao" forKey:@"name"];
 // 同步
 [defaults synchronize];
 // 取值
 NSString *str = [defaults objectForKey:@"name"];
 NSLog(@"%@",str);
// 2. NSUserDefaults图片存取:
[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation([UIImage imageNamed:@"Default-568h@2xiPhonePortraitiOS78_320x568pt" ]) forKey:@"image"];
NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"image"];
self.imageView.image = [UIImage imageWithData:imageData];

9 定时器

//第一种:
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(say) userInfo:nil repeats:YES];
//第二种:
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(say)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

10 延时

// 第一种:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{   
});
// 第二种:
[NSThread sleepForTimeInterval:2.0f];
// 第三种:
[self performSelector:self withObject:@selector(operation) afterDelay:1.0];

11 点击视图退出键盘

第一种方式:
[textField resignFirstResponder];
第二种方式:
[self.view endEditing:YES];

12 将OC字符串转换成C字符:

sql.UTF8String

13 结构体循环:

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
 NSLog(@"第 %d 项内容是 %@", (int)idx, obj);
 if ([@"王五" isEqualToString:obj]) *stop = YES;
}];

14 不使用HTTPS方法:

<key>NSAppTransportSecurity</key>
     <dict>
             <key>NSAllowsArbitraryLoads</key>
             <true/>
     </dict>

15 随机数:

int x = arc4random() % 100;
//生成指定范围随机数[1-6]
int num = ((arc4random() % 6) + 1);

16 添加动画:

// 第一种:
[UIView animateWithDuration:2.0f animations:^{
      //.. insert code
  }];
// 第二种:
[UIView beginAnimations:@"doflip" context:nil];
 //设置时常
 [UIView setAnimationDuration:2.0f];
 //设置动画淡入淡出
 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
 //设置代理
 [UIView setAnimationDelegate:self];
 //设置翻转方向
   [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
 //动画结束
 [UIView commitAnimations];

17 arc和非arc的转换:

如果你的项目使用的非 ARC 模式,则为 ARC 模式的代码文件加入 -fobjc-arc 标签。
如果你的项目使用的是 ARC 模式,则为非 ARC 模式的代码文件加入 -fno-objc-arc 标签。

18 Json(反序列化):

NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

19 URL中有特殊字符需要加百分号转译:

NSLog(@"%@",[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]);
// 取反
NSLog(@"%@",[str stringByRemovingPercentEncoding]);

20 局部刷新:

// 刷新指定行 
NSIndexPath *path = [NSIndexPath indexPathForRow:alertView.tag inSection:0];
[self.tableview reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationRight];
//如果不进行刷新会怎么样?(修改之后不会即时刷新,要等到重新对cell进行数据填充的时候才会刷新)

21 屏幕自动旋转:

self.imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

22 获取系统版本:

[[UIDevice currentDevice].systemVersion doubleValue];

23 设置状态背景色:

// 第一种方式:
在info.plist文件中添加View controller-based status bar appearance  设为 NO
在AppDelegate.m 文件中的didFinishLaunchingWithOptionsfa方法中添加application.statusBarStyle = UIStatusBarStyleLightContent; 即可改变状态栏背景色。
总结:这种方法在ios9之前不会报错,但ios9后会报错,但不影响程序的正常运行,这是苹果自身的bug。
//第二种方式:在重写的UINavigationController控制器中添加一下代码
-(UIStatusBarStyle)preferredStatusBarStyle {
 return UIStatusBarStyleLightContent;
}
总结:暂时能够解决问题,但目前不知解决的思路。

24 视图位置交换:

//把一个子视图放到最下面
[self.view sendSubviewToBack:view9]; 
//把一个子视图放到最上面 
[self.view bringSubviewToFront:view9];
[self.view insertSubview:view10 atIndex:6];  
//我们也可以指定插入在谁的下面,在view8下面,那就在最下面了  
[self.view insertSubview:view10 belowSubview:view8]; 
//我们也可以指定插入在谁的上面,在view9上面,那就在最上面了 
[self.view insertSubview:view10 aboveSubview:view9];  
//我们也可以交换两个视图的位置,比如把5和7交换,也就是view8和view10

25 单击手势:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)];        
[cell addGestureRecognizer:singleTap];

26 设置导航栏主题:

// 通过navBar设置导航栏的所有属性,比如背景,字体大小...
UINavigationBar *navBar = [UINavigationBar appearance];

27 获取tabbar控制其中子控制器的个数:

self.viewControllers.count;

28 字体设置:

attr[NSForegroundColorAttributeName ] = [UIColor whiteColor];
attr[NSFontAttributeName] = [UIFont systemFontOfSize:20];
[navBar setTitleTextAttributes:attr];

29 隐藏tabbar:

viewController.hidesBottomBarWhenPushed = YES;

30 禁用系统自带侧滑:

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

31 UIWebView填充html自动适配:

[webView setScalesPageToFit:YES];

32 获取设备类型:

[UIDevice currentDevice].model;

33 按钮存储多个值(Runtime):

#import <objc/runtime.h>
//存值: 
objc_setAssociatedObject(btn, @"text", textf, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
//取值:
UITextField *t = objc_getAssociatedObject(button, @"text");

34 获取UIStoryboard中的控制器:

UIStoryboard *b = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
TwoViewController *two = [b instantiateViewControllerWithIdentifier:@"daili"];

35 返回不带状态栏的Rect:

CGRect bounds = [[UIScreen mainScreen] applicationFrame];

36 iOS各种机型的屏幕适配问题以iPhone6P为基准:

#define SYRealValue(value) ((value)/414.0f*[UIScreen mainScreen].bounds.size.width)

37 数组转NSData:

NSArray *arr1 = [[NSArray alloc]initWithObjects:@"0",@"5",nil];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr1];
NSArray *arr2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];

38 获取项目路径:

$(SRCROOT):代表了工程的相对路径
$(PROJECT_NAME) :是相对工程名

39 获取APP下载地址:

https://itunes.apple.com/cn/app/idxxxxxxx?mt=8
将xxxxxxx替换成自己app ID

40 正则表达式使用:

NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [identityCardPredicate evaluateWithObject:str];
regex:验证的类型 (@"^(\\d{14}|\\d{17})(\\d|[xX])$"str:需要验证的字符

41 NSString 转 NSArray :

NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:[result dataUsingEncoding:NSUTF8StringEncoding];
options:0 error:NULL];

42 修改cell选中状态的背景:

cell.selectedBackgroundView
http://blog.csdn.net/a6472953/article/details/7532212

43 TextField有值没值的判断::

_button.hidden = !(range.location > 0) && !(string.length == 1);

44 手机振动:

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

45 取消navigationbar下面的黑线:

self.navigationBar.barStyle = UIBaselineAdjustmentNone;

46 简单的二维动画操作:

self.testView.transform = CGAffineTransformMakeRotation(10*i);      // 旋转
self.testView.transform = CGAffineTransformRotate(self.testView.transform, 1);  // 可以承接上次动作,去操作。
self.testView.transform = CGAffineTransformTranslate(self.testView.transform, 0, 0);
self.testView.transform = CGAffineTransformMakeScale(i,i);  // 放大
self.testView.transform=CGAffineTransformScale(self.testView.transform, 1, 1);
self.testView.transform = CGAffineTransformMakeTranslation(1,-100);   // 平移

47 帧动画:

self.imageView.animationImages = [NSArray arrayWithObjects:
                                   [UIImage imageNamed:@"1"]
                                   ,[UIImage imageNamed:@"2"]
                                   ,[UIImage imageNamed:@"3"]
                                   ,[UIImage imageNamed:@"4"]
                                   ,[UIImage imageNamed:@"5"]
                                   ,nil];
 self.imageView.animationDuration = 5.0;
 self.imageView.animationRepeatCount = 3;
 [self.imageView startAnimating];

48 获取某个view所在的控制器:

-(UIViewController *)viewController {
UIViewController *viewController = nil;
UIResponder *next = self.nextResponder;
while (next) {
 if ([next isKindOfClass:[UIViewController class]]) {
   viewController = (UIViewController *)next;
   break;
 }
 next = next.nextResponder;
}
return viewController;
}

49 如何将IOS.m文件编译成C++:

// 打开 terminal 切换目录到需要转换的.m文件目录下,输入以下命令:
clang -rewrite-objc fileName.m

50 获取当前界面的View:

UIView *view = [[UIApplication sharedApplication].windows lastObject];

51 如何从A应用跳转到B应用::

//1.简单的跳转:
第一步:在B应用中配置URL Schemes
第二步:配置A应用访问B应用的NSURL *url = [NSURL URLWithString:@"weixin://"];  weixin就是B应用中配置URL Schemes参数。
第三步:在A应用中通过[[UIApplication sharedApplication] canOpenURL:url] 判断应用是否存在。
第四步:如果应用存在打开应用[[UIApplication sharedApplication] openURL:url];
备注:在执行第三步操作时,控制台可能打印错误信息,原因是苹果公司为了提高应用的安全性,想要访问必须设置对应白名单,白名单中最大允许50个应用被访问,如何设置白名单,
进入Info.plist文件中增加以下代码:
<key>LSApplicationQueriesSchemes</key>
 <array>
     <string>weixin</string>
     .....
 </array>
//  2 .跳转传参数:
在简单的跳转的url中稍作修改:
URL配置:
NSURL *url = [NSURL URLWithString:@"weixin://www.shixueqian.com/abc?title=hello&content=helloworld"];     //打开url
在B应用的AppDelegate.m 文件中增加接收参数的代理就行:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {     
NSLog(@"url=====%@ \n  sourceApplication=======%@ \n  annotation======%@", url, sourceApplication, annotation);     
return YES; 
}
IOS提供的代理:
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url ;  //回调是在iOS2.0的时候推出的,参数只有url。
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation ;//B回到是在iOS4.2的时候推出的,参数有url sourceApplication annotation
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options NS_AVAILABLE_IOS(9_0);//B回到是在iOS4.2的时候推出的,参数有url sourceApplication annotation

52 通过运行时,置换两个方法执行顺序:

Method cell = class_getClassMethod([UITableView class], @selector(tableView:cellForRowAtIndexPath:));
Method cellHeight = class_getClassMethod([UITableView class], @selector(tableView:heightForRowAtIndexPath:));
method_exchangeImplementations(cell, cellHeight);

[原文链接] http://www.jianshu.com/p/95c3ace94148

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值