你的位置:首页 > 操作系统

[操作系统]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];//创建shapelayermasklayer.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=AboutAccessibility — prefs:root=General&path=ACCESSIBILITYAirplane Mode On — prefs:root=AIRPLANE_MODEAuto-Lock — prefs:root=General&path=AUTOLOCKBrightness — prefs:root=BrightnessBluetooth — prefs:root=General&path=BluetoothDate & Time — prefs:root=General&path=DATE_AND_TIMEFaceTime — prefs:root=FACETIMEGeneral — prefs:root=GeneralKeyboard — prefs:root=General&path=KeyboardiCloud — prefs:root=CASTLEiCloud Storage & Backup — prefs:root=CASTLE&path=STORAGE_AND_BACKUPInternational — prefs:root=General&path=INTERNATIONALLocation Services — prefs:root=LOCATION_SERVICESMusic — prefs:root=MUSICMusic Equalizer — prefs:root=MUSIC&path=EQMusic Volume Limit — prefs:root=MUSIC&path=VolumeLimitNetwork — prefs:root=General&path=NetworkNike + iPod — prefs:root=NIKE_PLUS_IPODNotes — prefs:root=NOTESNotification — prefs:root=NOTIFICATI*****_IDPhone — prefs:root=PhonePhotos — prefs:root=PhotosProfile — prefs:root=General&path=ManagedConfigurationListReset — prefs:root=General&path=ResetSafari — prefs:root=SafariSiri — prefs:root=General&path=AssistantSounds — prefs:root=SoundsSoftware Update — prefs:root=General&path=SOFTWARE_UPDATE_LINKStore — prefs:root=STORETwitter — prefs:root=TWITTERUsage — prefs:root=General&path=USAGEVPN — prefs:root=General&path=Network/VPNWallpaper — prefs:root=WallpaperWi-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;}
复制代码