iOS开发常用代码块(2)
GCD定时器

- dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
- dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
- dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
- dispatch_source_set_event_handler(timer, ^{
- //倒计时结束,关闭
- dispatch_source_cancel(timer);
- dispatch_async(dispatch_get_main_queue(), ^{
- });
- });
- dispatch_resume(timer);

图片上绘制文字

- - (UIImage *)imageWithTitle:(NSString *)title fontSize:(CGFloat)fontSize
- {
- //画布大小
- CGSize size=CGSizeMake(self.size.width,self.size.height);
- //创建一个基于位图的上下文
- UIGraphicsBeginImageContextWithOptions(size,NO,0.0);//opaque:NO scale:0.0
- [self drawAtPoint:CGPointMake(0.0,0.0)];
- //文字居中显示在画布上
- NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
- paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
- paragraphStyle.alignment=NSTextAlignmentCenter;//文字居中
- //计算文字所占的size,文字居中显示在画布上
- CGSize sizeText=[title boundingRectWithSize:self.size options:NSStringDrawingUsesLineFragmentOrigin
- attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}context:nil].size;
- CGFloat width = self.size.width;
- CGFloat height = self.size.height;
- CGRect rect = CGRectMake((width-sizeText.width)/2, (height-sizeText.height)/2, sizeText.width, sizeText.height);
- //绘制文字
- [title drawInRect:rect withAttributes:@{ NSFontAttributeName:[UIFont systemFontOfSize:fontSize],NSForegroundColorAttributeName:[ UIColor whiteColor],NSParagraphStyleAttributeName:paragraphStyle}];
- //返回绘制的新图形
- UIImage *newImage= UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return newImage;
- }

查找一个视图的所有子视图

- - (NSMutableArray *)allSubViewsForView:(UIView *)view
- {
- NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
- for (UIView *subView in view.subviews)
- {
- [array addObject:subView];
- if (subView.subviews.count > 0)
- {
- [array addObjectsFromArray:[self allSubViewsForView:subView]];
- }
- }
- return array;
- }

计算文件大小

- //文件大小
- - (long long)fileSizeAtPath:(NSString *)path
- {
- NSFileManager *fileManager = [NSFileManager defaultManager];
- if ([fileManager fileExistsAtPath:path])
- {
- long long size = [fileManager attributesOfItemAtPath:path error:nil].fileSize;
- return size;
- }
- return 0;
- }
- //文件夹大小
- - (long long)folderSizeAtPath:(NSString *)path
- {
- NSFileManager *fileManager = [NSFileManager defaultManager];
- long long folderSize = 0;
- if ([fileManager fileExistsAtPath:path])
- {
- NSArray *childerFiles = [fileManager subpathsAtPath:path];
- for (NSString *fileName in childerFiles)
- {
- NSString *fileAbsolutePath = [path stringByAppendingPathComponent:fileName];
- if ([fileManager fileExistsAtPath:fileAbsolutePath])
- {
- long long size = [fileManager attributesOfItemAtPath:fileAbsolutePath error:nil].fileSize;
- folderSize += size;
- }
- }
- }
- return folderSize;
- }

UIView的设置部分圆角

- CGRect rect = view.bounds;
- CGSize radio = CGSizeMake(30, 30);//圆角尺寸
- UIRectCorner corner = UIRectCornerTopLeft|UIRectCornerTopRight;//这只圆角位置
- UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:radio];
- CAShapeLayer *masklayer = [[CAShapeLayer alloc]init];//创建shapelayer
- masklayer.frame = view.bounds;
- masklayer.path = path.CGPath;//设置路径
- view.layer.mask = masklayer;

计算字符串字符长度,一个汉字算两个字符

- //方法一:
- - (int)convertToInt:(NSString*)strtemp
- {
- int strlength = 0;
- char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
- for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++)
- {
- if (*p)
- {
- p++;
- strlength++;
- }
- else
- {
- p++;
- }
- }
- return strlength;
- }
- //方法二:
- -(NSUInteger) unicodeLengthOfString: (NSString *) text
- {
- NSUInteger asciiLength = 0;
- for (NSUInteger i = 0; i < text.length; i++)
- {
- unichar uc = [text characterAtIndex: i];
- asciiLength += isascii(uc) ? 1 : 2;
- }
- return asciiLength;
- }

防止滚动视图手势覆盖侧滑手势
- [scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];
去掉导航栏返回的标题
- [[UIBarButtonItem appearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)forBarMetrics:UIBarMetricsDefault];
字符串中是否含有中文

- + (BOOL)checkIsChinese:(NSString *)string
- {
- for (int i=0; i<string.length; i++)
- {
- unichar ch = [string characterAtIndex:i];
- if (0x4E00 <= ch && ch <= 0x9FA5)
- {
- return YES;
- }
- }
- return NO;
- }

dispatch_group的使用

- dispatch_group_t dispatchGroup = dispatch_group_create();
- dispatch_group_enter(dispatchGroup);
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- NSLog(@"第一个请求完成");
- dispatch_group_leave(dispatchGroup);
- });
- dispatch_group_enter(dispatchGroup);
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- NSLog(@"第二个请求完成");
- dispatch_group_leave(dispatchGroup);
- });
- dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){
- NSLog(@"请求完成");
- });

UITextField每四位加一个空格,实现代理

- - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
- {
- // 四位加一个空格
- if ([string isEqualToString:@""])
- {
- // 删除字符
- if ((textField.text.length - 2) % 5 == 0)
- {
- textField.text = [textField.text substringToIndex:textField.text.length - 1];
- }
- return YES;
- }
- else
- {
- if (textField.text.length % 5 == 0)
- {
- textField.text = [NSString stringWithFormat:@"%@ ", textField.text];
- }
- }
- return YES;
- }

获取手机安装的应用

- Class c =NSClassFromString(@"LSApplicationWorkspace");
- id s = [(id)c performSelector:NSSelectorFromString(@"defaultWorkspace")];
- NSArray *array = [s performSelector:NSSelectorFromString(@"allInstalledApplications")];
- for (id item in array)
- {
- NSLog(@"%@",[item performSelector:NSSelectorFromString(@"applicationIdentifier")]);
- NSLog(@"%@",[item performSelector:NSSelectorFromString(@"bundleVersion")]);
- NSLog(@"%@",[item performSelector:NSSelectorFromString(@"shortVersionString")]);
- }

应用内打开系统设置界面

- //iOS8之后
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
- //如果App没有添加权限,显示的是设定界面。如果App有添加权限(例如通知),显示的是App的设定界面。
- //iOS8之前
- //先添加一个url type,在代码中调用如下代码,即可跳转到设置页面的对应项
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
- 可选值如下:
- About — prefs:root=General&path=About
- Accessibility — prefs:root=General&path=ACCESSIBILITY
- Airplane Mode On — prefs:root=AIRPLANE_MODE
- Auto-Lock — prefs:root=General&path=AUTOLOCK
- Brightness — prefs:root=Brightness
- Bluetooth — prefs:root=General&path=Bluetooth
- Date & Time — prefs:root=General&path=DATE_AND_TIME
- FaceTime — prefs:root=FACETIME
- General — prefs:root=General
- Keyboard — prefs:root=General&path=Keyboard
- iCloud — prefs:root=CASTLE
- iCloud Storage & Backup — prefs:root=CASTLE&path=STORAGE_AND_BACKUP
- International — prefs:root=General&path=INTERNATIONAL
- Location Services — prefs:root=LOCATION_SERVICES
- Music — prefs:root=MUSIC
- Music Equalizer — prefs:root=MUSIC&path=EQ
- Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit
- Network — prefs:root=General&path=Network
- Nike + iPod — prefs:root=NIKE_PLUS_IPOD
- Notes — prefs:root=NOTES
- Notification — prefs:root=NOTIFICATI*****_ID
- Phone — prefs:root=Phone
- Photos — prefs:root=Photos
- Profile — prefs:root=General&path=ManagedConfigurationList
- Reset — prefs:root=General&path=Reset
- Safari — prefs:root=Safari
- Siri — prefs:root=General&path=Assistant
- Sounds — prefs:root=Sounds
- Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK
- Store — prefs:root=STORE
- Twitter — prefs:root=TWITTER
- Usage — prefs:root=General&path=USAGE
- VPN — prefs:root=General&path=Network/VPN
- Wallpaper — prefs:root=Wallpaper
- Wi-Fi — prefs:root=WIFI

动画暂停再开始

- -(void)pauseLayer:(CALayer *)layer
- {
- CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
- layer.speed = 0.0;
- layer.timeOffset = pausedTime;
- }
- -(void)resumeLayer:(CALayer *)layer
- {
- CFTimeInterval pausedTime = [layer timeOffset];
- layer.speed = 1.0;
- layer.timeOffset = 0.0;
- layer.beginTime = 0.0;
- CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
- layer.beginTime = timeSincePause;
- }

iOS版中数字的格式化

- //通过NSNumberFormatter,同样可以设置NSNumber输出的格式。例如如下代码:
- NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
- formatter.numberStyle = NSNumberFormatterDecimalStyle;
- NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]];
- NSLog(@"Formatted number string:%@",string);
- //输出结果为:[1223:403] Formatted number string:123,456,789
- //其中NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值可以输出不同的数字格式。该枚举包括:
- typedef NS_ENUM(NSUInteger, NSNumberFormatterStyle) {
- NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
- NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
- NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
- NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
- NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
- NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
- };
- //各个枚举对应输出数字格式的效果如下:其中第三项和最后一项的输出会根据系统设置的语言区域的不同而不同。
- [1243:403] Formatted number string:123456789
- [1243:403] Formatted number string:123,456,789
- [1243:403] Formatted number string:¥123,456,789.00
- [1243:403] Formatted number string:-539,222,988%
- [1243:403] Formatted number string:1.23456789E8
- [1243:403] Formatted number string:一亿二千三百四十五万六千七百八十九

如何获取的WebView所有的图片地址

- //UIWebView
- - (void)webViewDidFinishLoad:(UIWebView *)webView
- {
- //这里是js,主要目的实现对url的获取
- static NSString * const jsGetImages =
- @"function getImages(){\
- var objs = document.getElementsByTagName(\"img\");\
- var imgScr = '';\
- for(var i=0;i<objs.length;i++){\
- imgScr = imgScr + objs[i].src + '+';\
- };\
- return imgScr;\
- };";
- [webView stringByEvaluatingJavaScriptFromString:jsGetImages];//注入js方法
- NSString *urlResult = [webView stringByEvaluatingJavaScriptFromString:@"getImages()"];
- NSArray *urlArray = [NSMutableArray arrayWithArray:[urlResult componentsSeparatedByString:@"+"]];
- //urlResurlt 就是获取到得所有图片的url的拼接;mUrlArray就是所有Url的数组
- }
- //WKWebView
- - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
- {
- static NSString * const jsGetImages =
- @"function getImages(){\
- var objs = document.getElementsByTagName(\"img\");\
- var imgScr = '';\
- for(var i=0;i<objs.length;i++){\
- imgScr = imgScr + objs[i].src + '+';\
- };\
- return imgScr;\
- };";
- [webView evaluateJavaScript:jsGetImages completionHandler:nil];
- [webView evaluateJavaScript:@"getImages()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
- NSLog(@"%@",result);
- }];
- }

获取到的WebView的高度
- CGFloat height = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
导航栏变为纯透明

- //第一种方法
- //导航栏纯透明
- [self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
- //去掉导航栏底部的黑线
- self.navigationBar.shadowImage = [UIImage new];
- //第二种方法
- [[self.navigationBar subviews] objectAtIndex:0].alpha = 0;

tabBar变为纯透明
- [self.tabBar setBackgroundImage:[UIImage new]];
- self.tabBar.shadowImage = [UIImage new];
navigationBar根据滑动距离的渐变色实现

- //第一种
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView
- {
- CGFloat offsetToShow = 200.0;//滑动多少就完全显示
- CGFloat alpha = 1 - (offsetToShow - scrollView.contentOffset.y) / offsetToShow;
- [[self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = alpha;
- }
- //第二种
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView
- {
- CGFloat offsetToShow = 200.0;
- CGFloat alpha = 1 - (offsetToShow - scrollView.contentOffset.y) / offsetToShow;
- [self.navigationController.navigationBar setShadowImage:[UIImage new]];
- [self.navigationController.navigationBar setBackgroundImage:[self imageWithColor:[[UIColor orangeColor]colorWithAlphaComponent:alpha]] forBarMetrics:UIBarMetricsDefault];
- }
- //生成一张纯色的图片
- - (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 *theImage = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return theImage;
- }

iOS开发常用代码块(2)的更多相关文章
- iOS开发常用代码块(第二弹)
GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispat ...
- iOS开发常用代码块
遍历可变数组的同时删除数组元素 NSMutableArray *copyArray = [NSMutableArray arrayWithArray:array]; NSString *str1 = ...
- IOS开发之----代码块的使用(二)
iOS4引入了一个新特性,支持代码块的使用,这将从根本上改变你的编程方式.代码块是对C语言的一个扩展,因此在Objective-C中完全支持.如果你学过Ruby,Python或Lisp编程语言,那么你 ...
- IOS开发常用设计模式
IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...
- ios开发 block语句块
ios开发 block语句块 1.block 理解为匿名函数 2.block变量的定义 //定义block变量,^表示定义block //技巧:函数名左右加括号,在函数名前面在加^ void (^bl ...
- iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)
iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry) 随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫 ...
- iOS开发-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...
- iOS开发 纯代码创建UICollectionView
转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xi ...
- 36个Android开发常用代码片段
//36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...
随机推荐
- 6. Samba服务和防火墙配置笔记
Samba文件服务器 (一)简介 内网文件服务器 windows-windows 文件共享服务 网络邻居linux-linux NFS windows-linux Samba (二)端口 smbd: ...
- 《机器学习实战》学习笔记一K邻近算法
一. K邻近算法思想:存在一个样本数据集合,称为训练样本集,并且每个数据都存在标签,即我们知道样本集中每一数据(这里的数据是一组数据,可以是n维向量)与所属分类的对应关系.输入没有标签的新数据后,将 ...
- 一个ubuntu phper的自我修养(ubuntu安装)
ubuntu安装篇 一.ubuntu下载 到ubuntu官网下载适合自己电脑配置的系统版本,此处不做展开. 二.制作USB启动盘 在windows下制作USB启动盘,工具是universal usb ...
- [java报错]Could not instantiate listener XXXXXX
写在开头的话: 兜兜转转,辞去了深圳的工作,回到了武汉,从事的居然一度是我最不想学的语言-java,曾经以为自己并不会java,但是上手之后,发现语言都是相通的,自己一度排斥学习java真的是不能再傻 ...
- Network网络
ifconfig 查看服务器网卡名称 ethtool ethXXX 查看网卡具体信息 要测试一个网卡是否真是1000M的,最保险的说用wget测试一个对方的带宽足够大的下载地址 wget http:/ ...
- SqlBulkCopy批量添加数据
var sqlconn = ConfigurationManager.ConnectionStrings["SQLConnStringRead"].ConnectionString ...
- python utf-8 配置
环境:centos6.5,python 2.6 源码文档使用utf-8 #!/usr/bin/python # -*- coding: UTF-8 -*- 字符串默认用utf-8(不用在前面加u了) ...
- Web API
https://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api ...
- 【前端】CommonJS的模块加载机制
CommonJS的模块加载机制 CommonJS模块的加载机制是,输入的是被输出的值的拷贝.也就是说,一旦输出一个值,模块内部的变化就影响不到这个值. 例如: // lib.js var counte ...
- 几个简单的css样式使用说明
假设我们的单标签是一个 div: 定义如下通用CSS: div{ position:relative; width:200px; height:60px; background:#ddd; } 法一: ...