GCD定时器

  1. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  2. dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
  3. dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
  4. dispatch_source_set_event_handler(timer, ^{
  5. //倒计时结束,关闭
  6. dispatch_source_cancel(timer);
  7. dispatch_async(dispatch_get_main_queue(), ^{
  8.  
  9. });
  10. });
  11. dispatch_resume(timer);

图片上绘制文字

  1. - (UIImage *)imageWithTitle:(NSString *)title fontSize:(CGFloat)fontSize
  2. {
  3. //画布大小
  4. CGSize size=CGSizeMake(self.size.width,self.size.height);
  5. //创建一个基于位图的上下文
  6. UIGraphicsBeginImageContextWithOptions(size,NO,0.0);//opaque:NO scale:0.0
  7.  
  8. [self drawAtPoint:CGPointMake(0.0,0.0)];
  9.  
  10. //文字居中显示在画布上
  11. NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
  12. paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
  13. paragraphStyle.alignment=NSTextAlignmentCenter;//文字居中
  14.  
  15. //计算文字所占的size,文字居中显示在画布上
  16. CGSize sizeText=[title boundingRectWithSize:self.size options:NSStringDrawingUsesLineFragmentOrigin
  17. attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}context:nil].size;
  18. CGFloat width = self.size.width;
  19. CGFloat height = self.size.height;
  20.  
  21. CGRect rect = CGRectMake((width-sizeText.width)/2, (height-sizeText.height)/2, sizeText.width, sizeText.height);
  22. //绘制文字
  23. [title drawInRect:rect withAttributes:@{ NSFontAttributeName:[UIFont systemFontOfSize:fontSize],NSForegroundColorAttributeName:[ UIColor whiteColor],NSParagraphStyleAttributeName:paragraphStyle}];
  24.  
  25. //返回绘制的新图形
  26. UIImage *newImage= UIGraphicsGetImageFromCurrentImageContext();
  27. UIGraphicsEndImageContext();
  28. return newImage;
  29. }

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

  1. - (NSMutableArray *)allSubViewsForView:(UIView *)view
  2. {
  3. NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
  4. for (UIView *subView in view.subviews)
  5. {
  6. [array addObject:subView];
  7. if (subView.subviews.count > 0)
  8. {
  9. [array addObjectsFromArray:[self allSubViewsForView:subView]];
  10. }
  11. }
  12. return array;
  13. }

计算文件大小

  1. //文件大小
  2. - (long long)fileSizeAtPath:(NSString *)path
  3. {
  4. NSFileManager *fileManager = [NSFileManager defaultManager];
  5.  
  6. if ([fileManager fileExistsAtPath:path])
  7. {
  8. long long size = [fileManager attributesOfItemAtPath:path error:nil].fileSize;
  9. return size;
  10. }
  11.  
  12. return 0;
  13. }
  14.  
  15. //文件夹大小
  16. - (long long)folderSizeAtPath:(NSString *)path
  17. {
  18. NSFileManager *fileManager = [NSFileManager defaultManager];
  19.  
  20. long long folderSize = 0;
  21.  
  22. if ([fileManager fileExistsAtPath:path])
  23. {
  24. NSArray *childerFiles = [fileManager subpathsAtPath:path];
  25. for (NSString *fileName in childerFiles)
  26. {
  27. NSString *fileAbsolutePath = [path stringByAppendingPathComponent:fileName];
  28. if ([fileManager fileExistsAtPath:fileAbsolutePath])
  29. {
  30. long long size = [fileManager attributesOfItemAtPath:fileAbsolutePath error:nil].fileSize;
  31. folderSize += size;
  32. }
  33. }
  34. }
  35.  
  36. return folderSize;
  37. }

UIView的设置部分圆角

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

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

  1. //方法一:
  2. - (int)convertToInt:(NSString*)strtemp
  3. {
  4. int strlength = 0;
  5. char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
  6. for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++)
  7. {
  8. if (*p)
  9. {
  10. p++;
  11. strlength++;
  12. }
  13. else
  14. {
  15. p++;
  16. }
  17.  
  18. }
  19. return strlength;
  20. }
  21.  
  22. //方法二:
  23. -(NSUInteger) unicodeLengthOfString: (NSString *) text
  24. {
  25. NSUInteger asciiLength = 0;
  26. for (NSUInteger i = 0; i < text.length; i++)
  27. {
  28. unichar uc = [text characterAtIndex: i];
  29. asciiLength += isascii(uc) ? 1 : 2;
  30. }
  31. return asciiLength;
  32. }

防止滚动视图手势覆盖侧滑手势

  1. [scrollView.panGestureRecognizer requireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer];

去掉导航栏返回的标题

  1. [[UIBarButtonItem appearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)forBarMetrics:UIBarMetricsDefault];

字符串中是否含有中文

  1. + (BOOL)checkIsChinese:(NSString *)string
  2. {
  3. for (int i=0; i<string.length; i++)
  4. {
  5. unichar ch = [string characterAtIndex:i];
  6. if (0x4E00 <= ch && ch <= 0x9FA5)
  7. {
  8. return YES;
  9. }
  10. }
  11. return NO;
  12. }

dispatch_group的使用

  1. dispatch_group_t dispatchGroup = dispatch_group_create();
  2. dispatch_group_enter(dispatchGroup);
  3. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  4. NSLog(@"第一个请求完成");
  5. dispatch_group_leave(dispatchGroup);
  6. });
  7.  
  8. dispatch_group_enter(dispatchGroup);
  9.  
  10. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  11. NSLog(@"第二个请求完成");
  12. dispatch_group_leave(dispatchGroup);
  13. });
  14.  
  15. dispatch_group_notify(dispatchGroup, dispatch_get_main_queue(), ^(){
  16. NSLog(@"请求完成");
  17. });

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

  1. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  2. {
  3. // 四位加一个空格
  4. if ([string isEqualToString:@""])
  5. {
  6. // 删除字符
  7. if ((textField.text.length - 2) % 5 == 0)
  8. {
  9. textField.text = [textField.text substringToIndex:textField.text.length - 1];
  10. }
  11. return YES;
  12. }
  13. else
  14. {
  15. if (textField.text.length % 5 == 0)
  16. {
  17. textField.text = [NSString stringWithFormat:@"%@ ", textField.text];
  18. }
  19. }
  20. return YES;
  21. }

获取手机安装的应用

  1. Class c =NSClassFromString(@"LSApplicationWorkspace");
  2. id s = [(id)c performSelector:NSSelectorFromString(@"defaultWorkspace")];
  3. NSArray *array = [s performSelector:NSSelectorFromString(@"allInstalledApplications")];
  4. for (id item in array)
  5. {
  6. NSLog(@"%@",[item performSelector:NSSelectorFromString(@"applicationIdentifier")]);
  7. NSLog(@"%@",[item performSelector:NSSelectorFromString(@"bundleVersion")]);
  8. NSLog(@"%@",[item performSelector:NSSelectorFromString(@"shortVersionString")]);
  9. }

应用内打开系统设置界面

  1. //iOS8之后
  2. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
  3. //如果App没有添加权限,显示的是设定界面。如果App有添加权限(例如通知),显示的是App的设定界面。
  4.  
  5. //iOS8之前
  6. //先添加一个url type,在代码中调用如下代码,即可跳转到设置页面的对应项
  7. [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];
  8.  
  9. 可选值如下:
  10. About prefs:root=General&path=About
  11. Accessibility prefs:root=General&path=ACCESSIBILITY
  12. Airplane Mode On prefs:root=AIRPLANE_MODE
  13. Auto-Lock prefs:root=General&path=AUTOLOCK
  14. Brightness prefs:root=Brightness
  15. Bluetooth prefs:root=General&path=Bluetooth
  16. Date & Time prefs:root=General&path=DATE_AND_TIME
  17. FaceTime prefs:root=FACETIME
  18. General prefs:root=General
  19. Keyboard prefs:root=General&path=Keyboard
  20. iCloud prefs:root=CASTLE
  21. iCloud Storage & Backup prefs:root=CASTLE&path=STORAGE_AND_BACKUP
  22. International prefs:root=General&path=INTERNATIONAL
  23. Location Services prefs:root=LOCATION_SERVICES
  24. Music prefs:root=MUSIC
  25. Music Equalizer prefs:root=MUSIC&path=EQ
  26. Music Volume Limit prefs:root=MUSIC&path=VolumeLimit
  27. Network prefs:root=General&path=Network
  28. Nike + iPod prefs:root=NIKE_PLUS_IPOD
  29. Notes prefs:root=NOTES
  30. Notification prefs:root=NOTIFICATI*****_ID
  31. Phone prefs:root=Phone
  32. Photos prefs:root=Photos
  33. Profile prefs:root=General&path=ManagedConfigurationList
  34. Reset prefs:root=General&path=Reset
  35. Safari prefs:root=Safari
  36. Siri prefs:root=General&path=Assistant
  37. Sounds prefs:root=Sounds
  38. Software Update prefs:root=General&path=SOFTWARE_UPDATE_LINK
  39. Store prefs:root=STORE
  40. Twitter prefs:root=TWITTER
  41. Usage prefs:root=General&path=USAGE
  42. VPN prefs:root=General&path=Network/VPN
  43. Wallpaper prefs:root=Wallpaper
  44. Wi-Fi prefs:root=WIFI

动画暂停再开始

  1. -(void)pauseLayer:(CALayer *)layer
  2. {
  3. CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
  4. layer.speed = 0.0;
  5. layer.timeOffset = pausedTime;
  6. }
  7.  
  8. -(void)resumeLayer:(CALayer *)layer
  9. {
  10. CFTimeInterval pausedTime = [layer timeOffset];
  11. layer.speed = 1.0;
  12. layer.timeOffset = 0.0;
  13. layer.beginTime = 0.0;
  14. CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
  15. layer.beginTime = timeSincePause;
  16. }

iOS版中数字的格式化

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

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

  1. //UIWebView
  2. - (void)webViewDidFinishLoad:(UIWebView *)webView
  3. {
  4. //这里是js,主要目的实现对url的获取
  5. static NSString * const jsGetImages =
  6. @"function getImages(){\
  7. var objs = document.getElementsByTagName(\"img\");\
  8. var imgScr = '';\
  9. for(var i=0;i<objs.length;i++){\
  10. imgScr = imgScr + objs[i].src + '+';\
  11. };\
  12. return imgScr;\
  13. };";
  14.  
  15. [webView stringByEvaluatingJavaScriptFromString:jsGetImages];//注入js方法
  16. NSString *urlResult = [webView stringByEvaluatingJavaScriptFromString:@"getImages()"];
  17. NSArray *urlArray = [NSMutableArray arrayWithArray:[urlResult componentsSeparatedByString:@"+"]];
  18. //urlResurlt 就是获取到得所有图片的url的拼接;mUrlArray就是所有Url的数组
  19. }
  20.  
  21. //WKWebView
  22. - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
  23. {
  24. static NSString * const jsGetImages =
  25. @"function getImages(){\
  26. var objs = document.getElementsByTagName(\"img\");\
  27. var imgScr = '';\
  28. for(var i=0;i<objs.length;i++){\
  29. imgScr = imgScr + objs[i].src + '+';\
  30. };\
  31. return imgScr;\
  32. };";
  33.  
  34. [webView evaluateJavaScript:jsGetImages completionHandler:nil];
  35. [webView evaluateJavaScript:@"getImages()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
  36. NSLog(@"%@",result);
  37. }];
  38. }

获取到的WebView的高度

  1. CGFloat height = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];

导航栏变为纯透明

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

tabBar变为纯透明

  1. [self.tabBar setBackgroundImage:[UIImage new]];
  2. self.tabBar.shadowImage = [UIImage new];

navigationBar根据滑动距离的渐变色实现

  1. //第一种
  2. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
  3. {
  4. CGFloat offsetToShow = 200.0;//滑动多少就完全显示
  5. CGFloat alpha = 1 - (offsetToShow - scrollView.contentOffset.y) / offsetToShow;
  6. [[self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = alpha;
  7. }
  8.  
  9. //第二种
  10. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
  11. {
  12. CGFloat offsetToShow = 200.0;
  13. CGFloat alpha = 1 - (offsetToShow - scrollView.contentOffset.y) / offsetToShow;
  14.  
  15. [self.navigationController.navigationBar setShadowImage:[UIImage new]];
  16. [self.navigationController.navigationBar setBackgroundImage:[self imageWithColor:[[UIColor orangeColor]colorWithAlphaComponent:alpha]] forBarMetrics:UIBarMetricsDefault];
  17. }
  18.  
  19. //生成一张纯色的图片
  20. - (UIImage *)imageWithColor:(UIColor *)color
  21. {
  22. CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
  23. UIGraphicsBeginImageContext(rect.size);
  24. CGContextRef context = UIGraphicsGetCurrentContext();
  25. CGContextSetFillColorWithColor(context, [color CGColor]);
  26. CGContextFillRect(context, rect);
  27. UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
  28. UIGraphicsEndImageContext();
  29.  
  30. return theImage;
  31. }

iOS开发常用代码块(2)的更多相关文章

  1. iOS开发常用代码块(第二弹)

    GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispat ...

  2. iOS开发常用代码块

    遍历可变数组的同时删除数组元素 NSMutableArray *copyArray = [NSMutableArray arrayWithArray:array]; NSString *str1 = ...

  3. IOS开发之----代码块的使用(二)

    iOS4引入了一个新特性,支持代码块的使用,这将从根本上改变你的编程方式.代码块是对C语言的一个扩展,因此在Objective-C中完全支持.如果你学过Ruby,Python或Lisp编程语言,那么你 ...

  4. IOS开发常用设计模式

    IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...

  5. ios开发 block语句块

    ios开发 block语句块 1.block 理解为匿名函数 2.block变量的定义 //定义block变量,^表示定义block //技巧:函数名左右加括号,在函数名前面在加^ void (^bl ...

  6. iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry)

    iOS开发通过代码方式使用AutoLayout (NSLayoutConstraint + Masonry) 随着iPhone6/6+设备的上市,如何让手头上的APP适配多种机型多种屏幕尺寸变得尤为迫 ...

  7. iOS开发-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...

  8. iOS开发 纯代码创建UICollectionView

    转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xi ...

  9. 36个Android开发常用代码片段

    //36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...

随机推荐

  1. 6. Samba服务和防火墙配置笔记

    Samba文件服务器 (一)简介 内网文件服务器 windows-windows 文件共享服务 网络邻居linux-linux NFS windows-linux Samba (二)端口 smbd: ...

  2. 《机器学习实战》学习笔记一K邻近算法

     一. K邻近算法思想:存在一个样本数据集合,称为训练样本集,并且每个数据都存在标签,即我们知道样本集中每一数据(这里的数据是一组数据,可以是n维向量)与所属分类的对应关系.输入没有标签的新数据后,将 ...

  3. 一个ubuntu phper的自我修养(ubuntu安装)

    ubuntu安装篇 一.ubuntu下载 到ubuntu官网下载适合自己电脑配置的系统版本,此处不做展开. 二.制作USB启动盘 在windows下制作USB启动盘,工具是universal usb ...

  4. [java报错]Could not instantiate listener XXXXXX

    写在开头的话: 兜兜转转,辞去了深圳的工作,回到了武汉,从事的居然一度是我最不想学的语言-java,曾经以为自己并不会java,但是上手之后,发现语言都是相通的,自己一度排斥学习java真的是不能再傻 ...

  5. Network网络

    ifconfig 查看服务器网卡名称 ethtool ethXXX 查看网卡具体信息 要测试一个网卡是否真是1000M的,最保险的说用wget测试一个对方的带宽足够大的下载地址 wget http:/ ...

  6. SqlBulkCopy批量添加数据

    var sqlconn = ConfigurationManager.ConnectionStrings["SQLConnStringRead"].ConnectionString ...

  7. python utf-8 配置

    环境:centos6.5,python 2.6 源码文档使用utf-8 #!/usr/bin/python # -*- coding: UTF-8 -*- 字符串默认用utf-8(不用在前面加u了) ...

  8. Web API

    https://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api ...

  9. 【前端】CommonJS的模块加载机制

    CommonJS的模块加载机制 CommonJS模块的加载机制是,输入的是被输出的值的拷贝.也就是说,一旦输出一个值,模块内部的变化就影响不到这个值. 例如: // lib.js var counte ...

  10. 几个简单的css样式使用说明

    假设我们的单标签是一个 div: 定义如下通用CSS: div{ position:relative; width:200px; height:60px; background:#ddd; } 法一: ...