首页 > 代码库 > ios培训:ios技巧总结,错过就不在!

ios培训:ios技巧总结,错过就不在!

  今天给大家总结了一些iOS小技巧总结,绝对有你想要的!绝对有你想要的!

  UITableView的Group样式下顶部空白处理

  //分组列表头部空白处理

  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.1)];

  self.tableView.tableHeaderView = view;

  获取某个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;

  }

  两种方法删除NSUserDefaults所有记录

  //方法一

  NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];

  [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

  //方法二

  - (void)resetDefaults

  {

  NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];

  NSDictionary * dict = [defs dictionaryRepresentation];

  for (id key in dict)

  {

  [defs removeObjectForKey:key];

  }

  [defs synchronize];

  }

  打印系统所有已注册的字体名称

  #pragma mark - 打印系统所有已注册的字体名称

  void enumerateFonts()

  {

  for(NSString *familyName in [UIFont familyNames])

  {

  NSLog(@"%@",familyName);

  NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];

  for(NSString *fontName in fontNames)

  {

  NSLog(@"\t|- %@",fontName);

  }

  }

  }

  获取图片某一点的颜色

  - (UIColor*) getPixelColorAtLocation:(CGPoint)point inImage:(UIImage *)image

  {

  UIColor* color = nil;

  CGImageRef inImage = image.CGImage;

  CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];

  if (cgctx == NULL) {

  return nil; /* error */

  }

  size_t w = CGImageGetWidth(inImage);

  size_t h = CGImageGetHeight(inImage);

  CGRect rect = {{0,0},{w,h}};

  CGContextDrawImage(cgctx, rect, inImage);

  unsigned char* data = http://www.mamicode.com/CGBitmapContextGetData (cgctx);

  if (data != NULL) {

  int offset = 4*((w*round(point.y))+round(point.x));

  int alpha = data[offset];

  int red = data[offset+1];

  int green = data[offset+2];

  int blue = data[offset+3];

  color = [UIColor colorWithRed:(red/255.0f) green:(green/255.0f) blue:

  (blue/255.0f) alpha:(alpha/255.0f)];

  }

  CGContextRelease(cgctx);

  if (data) {

  free(data);

  }

  return color;

  }

  字符串反转

  第一种:

  - (NSString *)reverseWordsInString:(NSString *)str

  {

  NSMutableString *newString = [[NSMutableString alloc] initWithCapacity:str.length];

  for (NSInteger i = str.length - 1; i >= 0 ; i --)

  {

  unichar ch = [str characterAtIndex:i];

  [newString appendFormat:@"%c", ch];

  }

  return newString;

  }

  //第二种:

  - (NSString*)reverseWordsInString:(NSString*)str

  {

  NSMutableString *reverString = [NSMutableString stringWithCapacity:str.length];

  [str enumerateSubstringsInRange:NSMakeRange(0, str.length) options:NSStringEnumerationReverse | NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

  [reverString appendString:substring];

  }];

  return reverString;

  }

  禁止锁屏

  默认情况下,当设备一段时间没有触控动作时,iOS会锁住屏幕。但有一些应用是不需要锁屏的,比如视频播放器。

  [UIApplication sharedApplication].idleTimerDisabled = YES;

  或

  [[UIApplication sharedApplication] setIdleTimerDisabled:YES];

  模态推出透明界面

  UIViewController *vc = [[UIViewController alloc] init];

  UINavigationController *na = [[UINavigationController alloc] initWithRootViewController:vc];

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)

  {

  na.modalPresentationStyle = UIModalPresentationOverCurrentContext;

  }

  else

  {

  self.modalPresentationStyle=UIModalPresentationCurrentContext;

  }

  [self presentViewController:na animated:YES completion:nil];

  Xcode调试不显示内存占用

  editSCheme 里面有个选项叫叫做enable zoombie Objects 取消选中

  显示隐藏文件

  //显示

  defaults write com.apple.finder AppleShowAllFiles -bool true

  killall Finder

  //隐藏

  defaults write com.apple.finder AppleShowAllFiles -bool false

  killall Finder

  iOS跳转到App Store下载应用评分

  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APPID"]];

  iOS 获取汉字的拼音

  + (NSString *)transform:(NSString *)chinese

  {

  //将NSString装换成NSMutableString

  NSMutableString *pinyin = [chinese mutableCopy];

  //将汉字转换为拼音(带音标)

  CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformMandarinLatin, NO);

  NSLog(@"%@", pinyin);

  //去掉拼音的音标

  CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformStripCombiningMarks, NO);

  NSLog(@"%@", pinyin);

  //返回最近结果

  return pinyin;

  }

  手动更改iOS状态栏的颜色

  - (void)setStatusBarBackgroundColor:(UIColor *)color

  {

  UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

  if ([statusBar respondsToSelector:@selector(setBackgroundColor:)])

  {

  statusBar.backgroundColor = color;

  }

  }

  判断当前ViewController是push还是present的方式显示的

  NSArray *viewcontrollers=self.navigationController.viewControllers;

  if (viewcontrollers.count > 1)

  {

  if ([viewcontrollers objectAtIndex:viewcontrollers.count - 1] == self)

  {

  //push方式

  [self.navigationController popViewControllerAnimated:YES];

  }

  }

  else

  {

  //present方式

  [self dismissViewControllerAnimated:YES completion:nil];

  }

  获取实际使用的LaunchImage图片

  - (NSString *)getLaunchImageName

  {

  CGSize viewSize = self.window.bounds.size;

  // 竖屏

  NSString *viewOrientation = @"Portrait";

  NSString *launchImageName = nil;

  NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];

  for (NSDictionary* dict in imagesDict)

  {

  CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);

  if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])

  {

  launchImageName = dict[@"UILaunchImageName"];

  }

  }

  return launchImageName;

  }

  iOS在当前屏幕获取第一响应

  UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];

  UIView * firstResponder = [keyWindow performSelector:@selector(firstResponder)];

  判断对象是否遵循了某协议

  if ([self.selectedController conformsToProtocol:@protocol(RefreshPtotocol)])

  {

  [self.selectedController performSelector:@selector(onTriggerRefresh)];

  }

  判断view是不是指定视图的子视图

  BOOL isView = [textView isDescendantOfView:self.view];

  NSArray 快速求总和 最大值 最小值 和 平均值

  NSArray *array = [NSArray arrayWithObjects:@"2.0", @"2.3", @"3.0", @"4.0", @"10", nil];

  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(@"%f\n%f\n%f\n%f",sum,avg,max,min);

  修改UITextField中Placeholder的文字颜色

  [textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

  关于NSDateFormatter的格式

  G: 公元时代,例如AD公元

  yy: 年的后2位

  yyyy: 完整年

  MM: 月,显示为1-12

  MMM: 月,显示为英文月份简写,如 Jan

  MMMM: 月,显示为英文月份全称,如 Janualy

  dd: 日,2位数表示,如02

  d: 日,1-2位显示,如 2

  EEE: 简写星期几,如Sun

  EEEE: 全写星期几,如Sunday

  aa: 上下午,AM/PM

  H: 时,24小时制,0-23

  K:时,12小时制,0-11

  m: 分,1-2位

  mm: 分,2位

  s: 秒,1-2位

  ss: 秒,2位

  S: 毫秒

  获取一个类的所有子类

  + (NSArray *) allSubclasses

  {

  Class myClass = [self class];

  NSMutableArray *mySubclasses = [NSMutableArray array];

  unsigned int numOfClasses;

  Class *classes = objc_copyClassList(&numOfClasses;);

  for (unsigned int ci = 0; ci < numOfClasses; ci++)

  {

  Class superClass = classes[ci];

  do{

  superClass = class_getSuperclass(superClass);

  } while (superClass && superClass != myClass);

  if (superClass)

  {

  [mySubclasses addObject: classes[ci]];

  }

  }

  free(classes);

  return mySubclasses;

  }

  监测IOS设备是否设置了代理,需要CFNetwork.framework

  NSDictionary *proxySettings = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings());

  NSArray *proxies = (__bridge NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef _Nonnull)([NSURL URLWithString:@"http://www.baidu.com"]), (__bridge CFDictionaryRef _Nonnull)(proxySettings)));

  NSLog(@"\n%@",proxies);

  NSDictionary *settings = proxies[0];

  NSLog(@"%@",[settings objectForKey:(NSString *)kCFProxyHostNameKey]);

  NSLog(@"%@",[settings objectForKey:(NSString *)kCFProxyPortNumberKey]);

  NSLog(@"%@",[settings objectForKey:(NSString *)kCFProxyTypeKey]);

  if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])

  {

  NSLog(@"没代理");

  }

  else

  {

  NSLog(@"设置了代理");

  }

  取消UICollectionView的隐式动画

  UICollectionView在reloadItems的时候,默认会附加一个隐式的fade动画,有时候很讨厌,尤其是当你的cell是复合cell的情况下(比如cell使用到了UIStackView)。

  下面几种方法都可以帮你去除这些动画

  //方法一

  [UIView performWithoutAnimation:^{

  [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];

  }];

  //方法二

  [UIView animateWithDuration:0 animations:^{

  [collectionView performBatchUpdates:^{

  [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];

  } completion:nil];

  }];

  //方法三

  [UIView setAnimationsEnabled:NO];

  [self.trackPanel performBatchUpdates:^{

  [collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:index inSection:0]]];

  } completion:^(BOOL finished) {

  [UIView setAnimationsEnabled:YES];

  }];

  让Xcode的控制台支持LLDB类型的打印

  打开终端输入三条命令:

  touch ~/.lldbinit

  echo display @import UIKit >> ~/.lldbinit

  echo target stop-hook add -o \"target stop-hook disable\" >> ~/.lldbinit

  CocoaPods pod install/pod update更新慢的问题

  pod install --verbose --no-repo-update

  pod update --verbose --no-repo-update

  如果不加后面的参数,默认会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少

  UIImage 占用内存大小

  UIImage *image = [UIImage imageNamed:@"aa"];

  NSUInteger size = CGImageGetHeight(image.CGImage) * CGImageGetBytesPerRow(image.CGImage);

  GCD timer定时器

  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的category

  - (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;

  }

 

ios培训:ios技巧总结,错过就不在!