分享一些iOS开发实用的小技巧

1.设置navigationbar title颜色

 UIColor *whiteColor = [UIColor whiteColor];
NSDictionary *dic = [NSDictionary dictionaryWithObject:whiteColor forKey:NSForegroundColorAttributeName];
[self.navigationController.navigationBar setTitleTextAttributes:dic];

2.获取UIColor RGB

 UIColor *color = [UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:1.0];
const CGFloat *components = CGColorGetComponents(color.CGColor);
NSLog(@"Red: %f", components[0]);
NSLog(@"Green: %f", components[1]);
NSLog(@"Blue: %f", components[2]);
NSLog(@"Alpha: %f", components[3]);

3.修改textField的placeholder的字体颜色、大小

 [self.textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
[self.textField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:@"_placeholderLabel.font"];

4.将color转为UIImage

 - (UIImage *)createImageWithColor:(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;
}

5.加载启动图的时候隐藏statusbar

在info.plist中加入Status bar is initially hidden 设置为YES

6.获取按钮title的size

/**
 * 获取按钮title的size
 */
- (CGFloat)getBtnTitleWidth:(UIButton*)btn {
 CGSize titleSize = [btn.titleLabel.text sizeWithAttributes:@{NSFontAttributeName:btn.titleLabel.font}];
 return titleSize;
}

7.设置Status bar颜色

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, -20, ScreenWidth, 20)];[view setBackgroundColor:COLOR_APP_MAIN];
[viewController.navigationController.navigationBar addSubview:view];

8.json转dictionary,dictionary转json

+ (NSString*)dictionaryToJson:(NSDictionary *)dic {

 NSError *parseError = nil;

 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];

 return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

}
+(NSDictionary *)jsonToDic:(NSString*)jsonStr {
  NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
  NSError *err;
  NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
               options:NSJSONReadingMutableContainers
                error:&err];
  return dic;
}

9.是否允许推送

+(BOOL)isAllowedNotification{

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

  UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];

  if(UIUserNotificationTypeNone != setting.types) {

   return YES;
  }
 }
 NSLog(@"不允许推送");
 return NO;
}

10.磁盘空间相关

+ (NSString *)memoryFormatter:(long long)diskSpace {
 NSString *formatted;
 double bytes = 1.0 * diskSpace;
 double megabytes = bytes / MB;
 double gigabytes = bytes / GB;
 if (gigabytes >= 1.0)
  formatted = [NSString stringWithFormat:@"%.2f GB", gigabytes];
 else if (megabytes >= 1.0)
  formatted = [NSString stringWithFormat:@"%.2f MB", megabytes];
 else
  formatted = [NSString stringWithFormat:@"%.2f bytes", bytes];
 NSLog(@"fotmatted=%@",formatted);

 return formatted;
}

+ (NSString *)totalDiskSpace {

 long long space = [[[[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil] objectForKey:NSFileSystemSize] longLongValue];
 return [self memoryFormatter:space];
}

+ (NSString *)freeDiskSpace {

 long long freeSpace = [[[[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil] objectForKey:NSFileSystemFreeSize] longLongValue];
 return [self memoryFormatter:freeSpace];
}

11.修改了leftBarButtonItem如何恢复系统侧滑返回功能

 //设置代理
self.interactivePopGestureRecognizer.delegate = self;
#pragma mark - <UIGestureRecognizerDelegate>
//实现代理方法:return YES :手势有效, NO :手势无效
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
 //当导航控制器的子控制器个数 大于1 手势才有效
 return self.childViewControllers.count > 1;
}

或者用第三方 UINavigationController+FDFullscreenPopGesture

12.使用UIAppearance在某个状态下设置颜色,字体等不好使

只需要在对应的位置用layoutIfNeeded刷新一下就可以了

13.设置圆形图片

/** 设置圆形图片(放到分类中使用) */
- (UIImage *)cutCircleImage {
 UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
 // 获取上下文
 CGContextRef ctr = UIGraphicsGetCurrentContext();
 // 设置圆形
 CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
 CGContextAddEllipseInRect(ctr, rect);
 // 裁剪
 CGContextClip(ctr);
 // 将图片画上去
 [self drawInRect:rect];
 UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 return image;
}

14.如果在xib中有一个控件, 已经明确设置尺寸了,输出的frame也是对的, 但是显示出来的效果不一样(比如尺寸变大了), 如果是这种情况一般就是autoresizingMask自动伸缩属性在搞鬼!

解决办法如下:

//xib的awakeFromNib方法中设置UIViewAutoresizingNone进行清空

 - (void)awakeFromNib {
 self.autoresizingMask = UIViewAutoresizingNone;
}

15.通过图片Data数据第一个字节 来获取图片扩展名

- (NSString *)contentTypeForImageData:(NSData *)data {
 uint8_t c;
 [data getBytes:&c length:1];
 switch (c) {
  case 0xFF:
   return @"jpeg";
  case 0x89:
   return @"png";
  case 0x47:
   return @"gif";
  case 0x49:
  case 0x4D:
   return @"tiff";
  case 0x52:
   if ([data length] < 12) {
    return nil;
   }
   NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
   if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
    return @"webp";
   }
   return nil;
 }
 return nil;
}

16.用0补全的方法

NSInteger count = 5;
//02代表:如果count不足2位 用0在最前面补全(2代表总输出的个数)
NSString *string = [NSString stringWithFormat:@"%02zd",count];
//输出结果是: 05
NSLog(@"%@", string);

总结

以上就是这篇文章的全部内容,希望本文中的这些小技巧能给大家开发iOS的时候提供一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • 提高iOS开发效率的小技巧与思路

    先用一张图展示学习iOS开发应该掌握的知识体系: 1.全图片作为背景的时候,可能遇到的问题.,滑回的时候,图片停留了一会才滑回去. 原因: 这种界面一般使用一般用imageView的第三种填充方式. 这种填充方式可以让图片不被压缩变形的前提下,尽可能去填充整个控件,但是设置这个枚举的填充方式的时候,记得按照下图这样设置,将超出控件范围的给切割掉 设置约束的时候,记得选择currentview的那个对象 2.设备适配的问题 还是上面这张图片,按照设计在6p上面来设置自动约束,约好后,在5s上面的时

  • iOS应用开发中UITableView的分割线的一些设置技巧

    对于ios7,ios8及以上来说,调整UITableView的cell的分割线位置已经是相当不便,因为UITableView内部使用了margin layout. 其实只需要如下这样子就可以实现分割线的控制. 复制代码 代码如下: -(void)tableView:(UITableView )tableView willDisplayCell:(UITableViewCell )cell forRowAtIndexPath:(NSIndexPath *)indexPath {     // 下面

  • iOS开发中简单实用的几个小技巧

    前言 本文记录了在iOS开发过程中所遇到的小知识点,以及一些技巧,下面话不多说,来看看详细的介绍. 技巧1:UIButton图片与文字默认是左右排列,如何实现右左排列? 解决技巧: button.transform = CGAffineTransformMakeScale(-1.0, 1.0); button.titleLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0); button.imageView.transform = CGA

  • 提高iOS开发的小技巧和思路小结 (二)

    前言 之前跟大家分享过一篇<提高iOS开发的小技巧和思路>,但是里面整理的不够全面,通过最近这段时间的整理学习,又整理了一些小技巧和思路分享给大家,下面话不多说了,来看看详细的介绍吧. 一.如何让你的app在后台持续运行一段时间 iOS的app在按下home键的时候,只有不到五秒钟的时间去处理保存或者是清楚资源的工作,这里提供一种办法.(这是在唐巧的书上面学习的) 产品经理的需求:如果app的本地持久化的额图片超过了100mb,需要去清除. 我之前的做法是在程序启动的时候去做这个事情,很显然效

  • 针对iOS开发的一些Xcode使用技巧小结

    一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车           显示主窗口 cmd + 0             导航窗口 option + cmd + 0    工具窗口 在.m & .h之间切换           control + cmd + 上/下 按照浏览文件的前后顺序切换     control + c

  • iOS开发中使用UILabel设置字体的相关技巧小结

    一.初始化 复制代码 代码如下: UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];      [self.view addSubview:myLabel]; 二.设置文字 1.设置默认文本 复制代码 代码如下: NSString *text = @"标签文本"; myLabel.text = text; 效果: 2.设置标签文本(此属性是iOS6.0之后才出现,如若不是必要,不

  • iOS屏幕适配开发实用技巧

    一.旋转处理 第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeFrames:) name:UIDeviceOrientationDidChangeNotification object:nil]; 第二步:处理接收事件 -(void)changeFrames:(NSNotification *)notification{ NSLog(@"change notifica

  • 分享一些iOS开发实用的小技巧

    1.设置navigationbar title颜色 UIColor *whiteColor = [UIColor whiteColor]; NSDictionary *dic = [NSDictionary dictionaryWithObject:whiteColor forKey:NSForegroundColorAttributeName]; [self.navigationController.navigationBar setTitleTextAttributes:dic]; 2.获取

  • JS 4个超级实用的小技巧 提升开发效率

    目录 1.短路判断 2.可选链操作符 ( ? ) 3.空值合并操作符 ( ?? ) 4.return终止函数 1.短路判断 当只需要简单的if条件时,可使用此方法 let x = 0; let foo = () => console.log('执行了'); if(x === 0){ foo() } 通过使用&&运算符来实现同样的if功能,如果&&之前的条件为false,则&&之后的代码将不会执行. let x = 0; let foo = () =&g

  • 值得收藏的SpringBoot 实用的小技巧

    前言 最近分享的一些源码.框架设计的东西.我发现大家热情不是特别高,想想大多数应该还是正儿八经写代码的居多:这次就分享一点接地气的: SpringBoot 使用中的一些小技巧. 算不上多高大上的东西,但都还挺有用. 屏蔽外部依赖 第一个是屏蔽外部依赖,什么意思呢? 比如大家日常开发时候有没有这样的烦恼: 项目是基于 SpringCloud 或者是 dubbo 这样的分布式服务,你需要依赖许多基础服务. 比如说某个订单号的生成.获取用户信息等. 由于服务拆分,这些功能都是在其他应用中以接口的形式提

  • 分享常用的3个C++小技巧

    目录 1.头文件是引用<iostream.h>还是<iostream>? 2.逗号分割表达式 3.在main函数之前运行代码 1.头文件是引用<iostream.h>还是<iostream>? 编码中依旧有程序员依旧使用<iostream.h>而不是<iostream>库.实际上,这两个库是有区别的: 首先针对用.h作为标准头文件已经明确不推荐使用. 其次,在功能方面,<iostream>包括IO类,且同时支持窄字符和宽字

  • kotlin开发cli工具小技巧详解

    目录 脚手架 开搞 开发调试 jcommander Main 函数声明 压缩模板 放飞自我 生成最终产物 结尾 脚手架 脚手架是为了保证各施工过程顺利进行而搭设的工作平台 而在程序开发过程中,每个工程或者说公司也都需要一个脚手架工具.通过脚手架命令行的形式简化开发流程,避免发生一些人为的相对低级的问题,所以这个也就是为什么叫做脚手架的原因吧. 而由于每个公司的代码规范都不同,一般情况下会主动让开发同学进行工程方面的cv操作,就是成本高并且容易出错.这也就是为什么我们打算写一些这样的工具的原因.

  • 分享五个有用的jquery小技巧

    下文里技巧实现的效果虽然并不新鲜,但通过jQuery的封装,HTML实现了很大的清洁.清爽简洁又高效的代码任何时候都是开发者所醉心追求的终极目标,也许它简单,但是它能量巨大.一起来看看我们小编推荐给大家的五个非常实用的jQuery技巧. 1.禁用鼠标右键 $(document).ready(function() { $(document).bind("contextmenu", function(e) { return false; }); }); 当然jquery1.7版本以后bin

  • 浅谈SpringBoot项目如何让前端开发提高效率(小技巧)

    社会分工越来越细,对于工程类研发来说,全栈是越来越少了.这是时代的进步,也是个体的悲哀. 今天要分享的小技巧,或许能够大幅提高你的开发效率.你可以用省下来的时间打个盹,浏览个美女写真什么的. 本篇文章涉及的知识点有 Swagger 为了文档 Nginx 为了效率 众所周知, java 项目的启动速度就像沙子里走路.要是你的前端模块也很大,有一大堆 node_modules , SpringBoot 会毫不犹豫的给你打包进去.每次修改前端页面,都需要打包才能调试,真是等的媳妇都跑了.可惜的是, v

  • JDK源码中一些实用的“小技巧”总结

    前言 这段时间比较闲,就看起了jdk源码.一般的一个高级开发工程师, 能阅读一些源码对自己的提升还是蛮大的.本文总结了一些JDK源码中的"小技巧",分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1 i++ vs i-- String源码的第985行,equals方法中 while (n--!= 0) { if (v1[i] != v2[i]) return false; i++; } 这段代码是用于判断字符串是否相等,但有个奇怪地方是用了i--!=0来做判断,我们通

  • 分享python数据统计的一些小技巧

    最近在用python做数据统计,这里总结了一些最近使用时查找和总结的一些小技巧,希望能帮助在做这方面时的一些童鞋.有些技巧是很平常的用法,平时我们没有注意,但是在特定场景,这些小方法还是能带来很大的帮助. 1.在字典中将键映射到多个值上面 {'b': [4, 5, 6], 'a': [1, 2, 3]} 有时候我们在统计相同key值的时候,希望把所有相同key的条目添加到以key为键的一个字典中,然后再进行各种操作,这时候我们就可以使用下面的代码进行操作: from collections im

随机推荐