总以为写过的代码以后用到即使记不起来Google一下,大不了翻一下代码就好,但是总是要用到的时候找来找去还是巨烦😂😂😂。终于下定决心整理成自己的,能最快速度的找到并实现,提高效率。何乐而不为呢?
GO!GO!GO!
- 取消tableView头部和底部悬浮效果
- 获取随机数
- 去除tableView分组头部多余间距
- 图片截取
- 模糊图片
- 获取文件大小
- 手机号验证
- 邮箱验证
- 网址验证
- JSON转字典
- iPhone设备类型判断
- iPhone系统版本判断
- 日志打印
- 颜色获取
- 弱引用
- 获取屏幕尺寸
- 获取view的控制
- 字典防崩溃
- 数组防崩溃
- 本文输入错误提示
- 获取当前时间
- 获取当前版本
- tabBar红点显示
- Log日志.m
- MD5加密
- 按钮背景颜色
- 判断对象是否为空
- 键盘退出与隐藏通知
- 获取设备唯一ID
- MOV转Mp4
- 上传图片
- 上传视频
- 获取视频帧图
- 压缩并导出视频
- 保存视频到相册
- 获取当前最顶层的ViewController
- 数组拆分
- 图片压缩
- 释放timer宏
- 获取某个view所在的控制器
- 两种方法删除NSUserDefaults所有记录
- 打印系统所有已注册的字体名称
- 获取图片某一点的颜色
- 字符串反转
- 禁止锁屏,
- 模态推出透明界面
- Xcode调试不显示内存占用
- 显示隐藏文件
- iOS跳转到App Store下载应用评分
- iOS 获取汉字的拼音
- 手动更改iOS状态栏的颜色
- 判断当前ViewController是push还是present的方式显示的
- 获取实际使用的LaunchImage图片
- iOS在当前屏幕获取第一响应
- 判断view是不是指定视图的子视图
- NSArray 快速求总和 最大值 最小值 和 平均值
- 修改UITextField中Placeholder的文字颜色
- 关于NSDateFormatter的格式
- 获取一个类的所有子类
- 监测IOS设备是否设置了代理,需要CFNetwork.framework
- 阿拉伯数字转中文格式
- Base64编码与NSString对象或NSData对象的转换
- 取消UICollectionView的隐式动画
- 下面几种方法都可以帮你去除这些动画
- 让Xcode的控制台支持LLDB类型的打印
- CocoaPods pod install/pod update更新慢的问题
- UIImage 占用内存大小
- GCD timer定时器
- 图片上绘制文字 写一个UIImage的category
- 查找一个视图的所有子视图
- 计算文件大小
- UIView设置部分圆角
- 取上整与取下整
- 计算字符串字符长度,一个汉字算两个字符
- 给UIView设置图片
- 防止scrollView手势覆盖侧滑手势
- 字符串中是否含有中文
- dispatch_group的使用
- UITextField每四位加一个空格,实现代理
- 获取私有属性和成员变量 #import
- 获取手机安装的应用
- 判断两个日期是否在同一周 写在NSDate的category里面
- 应用内打开系统设置界面
- 可选值如下:
- 屏蔽触发事件,2秒后取消屏蔽
- 动画暂停再开始
- iOS中数字的格式化
- 如何获取WebView所有的图片地址,
- 获取到webview的高度
- navigationBar变为纯透明
- tabBar同理
- navigationBar根据滑动距离的渐变色实现
- iOS 开发中一些相关的路径
- navigationItem的BarButtonItem如何紧靠屏幕右边界或者左边界?
- NSString进行URL编码和解码
- UIWebView设置User-Agent。
- 获取硬盘总容量与可用容量:
- 获取UIColor的RGBA值
- 修改textField的placeholder的字体颜色、大小
- AFN移除JSON中的NSNull
- ceil()和floor()
- 在webView加载完的代理方法里面这样写:
- NSDateFormat最佳方式(strptime)
- 毛玻璃
- tableview下拉刷新停留(不滚到顶部), 类似QQ,微信拉去历史消息
- KeyChain隐私信息存储(主要是密码类)
- 自定义圆角裁剪:搞性能
- 隐藏tabbar上面的虚线
- 隐藏导航栏下面的虚线
- 两个范围的富文本
- 修改UIAlertController
1:取消tableView头部和底部悬浮效果
1 | - (void)scrollViewDidScroll:(UIScrollView *)scrollView { |
2:获取随机数
1 | //第一种 |
3:去除tableView分组头部多余间距
一:
1 | - (void)viewDidLoad { |
二:
1 | - (void)viewWillAppear:(BOOL)animated{ |
有个朋友给了一个更好的方案
1 | 直接设置内边距,TableView会直接根据内边距进行相应的缩进! |
4:图片截取
1 | CGSize itemSize = CGSizeMake(self.image.size.width, self.image.size.height); |
5:模糊图片
1 | //加模糊效果,image是图片,blur是模糊度 |
6:文件大小
1 | /** |
7:手机号
1 | /** |
8:邮箱
通过区分字符串
1 | -(BOOL)validateEmail:(NSString*)email |
利用正则表达式验证
1 | -(BOOL)isValidateEmail:(NSString *)email { |
9:网址
1.首先进行第一步判断传入的字符串是否符合HTTP路径的语法规则,即”HTTPS://%E2%80%9D 或 “HTTP://%E2%80%9D ,从封装的一个函数,传入即可判断
1 | - (NSURL *)smartURLForString:(NSString *)str |
第二步,判断此路径是否能够请求成功,直接进行HTTP请求,观察返回结果->
1 | //判断 |
10:JSON转字典
1 | /*! |
数组转JSON
1 | NSArray *uids = [self.allModelUID objectAtIndexCheck:range]; |
11:iPhone设备类型
1 | typedef NS_ENUM(char, iPhoneModel){//0~3 |
12:iPhone系统版本
1 | //获取当前系统版本 |
13:日志
1 | // 日志输出 |
详细
1 | #ifdef DEBUG |
14:颜色
1 | // 颜色 |
15:弱引用
1 | // 弱引用 |
16:屏幕尺寸
1 | // 屏幕尺寸 |
17:获取view的控制
1 | /** 获取当前View的控制器对象 */ |
18:字典防蹦
不可变
1 | /*! |
可变
1 | /*! |
19:数组防蹦
不可变
1 | /*! |
可变
1 | /*! |
20:本文输入错误提示
1 | - (void)shake { |
21:当前时间
1 | + (NSString *)nowTimes{ |
22:当前版本
1 | /* |
23:tabBar红点
1 | - (void)showBadgeOnItemIndex:(int)index{ |
24:Log日志.m
1 | @implementation UIView(Log) |
25:MD5
1 | //16位MD5加密方式 |
26:按钮背景颜色
1 | /** |
27:对象是否为空
1 | // 判断对象是否为空 |
28:键盘退出与隐藏
1 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; |
}
1 | - (void)keyboardWillShow:(NSNotification *)notification { |
29:获取设备唯一ID
-(NSString )getUniqueDeviceIdentifierAsString { NSString appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];
1 | NSString *strApplicationUUID = [SAMKeychain passwordForService:appName account:@"incoding"]; |
}
30:MOV转Mp4
1 | - (void)movFileTransformToMP4WithSourceUrl:(NSURL *)sourceUrl completion:(void(^)(NSString *Mp4FilePath))comepleteBlock |
31:上传图片
1 | + (void)uploadImage:(UIImage *)imageIcon successUpload:(void (^)(id responseObject))successUpload failureUpload:(void (^)(NSError *error))failureUpload; |
32:上传视频
上传MOV
1 | + (void)updateMOVVideo:(NSURL *)url successUpload:(void (^)(id responseObject))successUpload failureUpload:(void (^)(NSError *error))failureUpload; |
上传MP4
1 | + (void)updateMP4Video:(NSURL *)url successUpload:(void (^)(id responseObject))successUpload failureUpload:(void (^)(NSError *error))failureUpload |
33:获取视频帧图
同步获取帧图
同步获取中间帧,需要指定哪个时间点的帧,当获取到以后,返回来的图片对象是CFRetained过的,需要外面手动CGImageRelease一下,释放内存。通过AVAsset来访问具体的视频资源,然后通过AVAssetImageGenerator图片生成器来生成某个帧图片: // Get the video’s center frame as video poster image - (UIImage )frameImageFromVideoURL:(NSURL )videoURL { // result UIImage *image = nil;
1 | // AVAssetImageGenerator |
异步获取帧图
异步获取某个帧的图片,与同步相比,只是调用API不同,可以传多个时间点,然后计算出实际的时间并返回图片,但是返回的图片不需要我们手动再release了。有可能取不到图片,所以还需要判断是否是AVAssetImageGeneratorSucceeded,是才转换图片:
1 | // 异步获取帧图片,可以一次获取多帧图片 |
34:压缩并导出视频
压缩视频是因为视频分辨率过高所生成的视频的大小太大了,对于移动设备来说,内存是不能太大的,如果不支持分片上传到服务器,或者不支持流上传、文件上传,而只能支持表单上传,那么必须要限制大小,压缩视频。
就像我们在使用某平台的视频的上传的时候,到现在还没有支持流上传,也不支持文件上传,只支持表单上传,导致视频大一点就会闪退。流上传是上传成功了,但是人家后台不识别,这一次让某平台坑坏了。直接用file上传,也传过去了,上传进度100%了,但是人家那边还是作为失败处理,无奈!
言归正传,压缩、导出视频,需要通过AVAssetExportSession来实现,我们需要指定一个preset,并判断是否支持这个preset,只有支持才能使用。
我们这里设置的preset为AVAssetExportPreset640x480,属于压缩得比较厉害的了,这需要根据服务器视频上传的支持程度而选择的。然后通过调用异步压缩并导出视频:
1 | - (void)compressVideoWithVideoURL:(NSURL *)videoURL |
35:保存视频到相册
写入相册可以通过ALAssetsLibrary类来实现,它提供了写入相册的API,异步写入,完成是要回到主线程更新UI:
1 | NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; |
36:获取当前最顶层的ViewController
1 | - (UIViewController *)topViewController { |
使用方法
1 | UIViewController *topmostVC = [self topViewController]; |
37:数组拆分
1 | /** |
38.图片压缩
用法:UIImage *yourImage= [self imageWithImageSimple:image scaledToSize:CGSizeMake(210.0, 210.0)];
1 | //压缩图片 |
39.释放Timer宏
1 | /* |
获取某个view所在的控制器
1 | - (UIViewController *)viewController |
两种方法删除NSUserDefaults所有记录
1 | //方法一 |
打印系统所有已注册的字体名称
1 | #pragma mark - 打印系统所有已注册的字体名称 |
获取图片某一点的颜色
1 | - (UIColor*) getPixelColorAtLocation:(CGPoint)point inImage:(UIImage *)image |
字符串反转
1 | 第一种: |
禁止锁屏,
默认情况下,当设备一段时间没有触控动作时,iOS会锁住屏幕。但有一些应用是不需要锁屏的,比如视频播放器。
1 | [UIApplication sharedApplication].idleTimerDisabled = YES; |
模态推出透明界面
1 | UIViewController *vc = [[UIViewController alloc] init]; |
Xcode调试不显示内存占用
1 | editSCheme 里面有个选项叫叫做enable zoombie Objects 取消选中 |
显示隐藏文件
1 | //显示 |
iOS跳转到App Store下载应用评分
1 | [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APPID"]]; |
iOS 获取汉字的拼音
1 | + (NSString *)transform:(NSString *)chinese |
手动更改iOS状态栏的颜色
1 | - (void)setStatusBarBackgroundColor:(UIColor *)color |
判断当前ViewController是push还是present的方式显示的
1 | NSArray *viewcontrollers=self.navigationController.viewControllers; |
获取实际使用的LaunchImage图片
1 | - (NSString *)getLaunchImageName |
iOS在当前屏幕获取第一响应
1 | UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow]; |
判断对象是否遵循了某协议
1 | if ([self.selectedController conformsToProtocol:@protocol(RefreshPtotocol)]) |
判断view是不是指定视图的子视图
1 | BOOL isView = [textView isDescendantOfView:self.view]; |
NSArray 快速求总和 最大值 最小值 和 平均值
1 | NSArray *array = [NSArray arrayWithObjects:@"2.0", @"2.3", @"3.0", @"4.0", @"10", nil]; |
修改UITextField中Placeholder的文字颜色
1 | [textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; |
关于NSDateFormatter的格式
1 | G: 公元时代,例如AD公元 |
获取一个类的所有子类
1 | + (NSArray *) allSubclasses |
监测IOS设备是否设置了代理,需要CFNetwork.framework
1 | NSDictionary *proxySettings = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings()); |
阿拉伯数字转中文格式
1 | +(NSString *)translation:(NSString *)arebic |
Base64编码与NSString对象或NSData对象的转换
1 | // Create NSData object |
取消UICollectionView的隐式动画
1 | UICollectionView在reloadItems的时候,默认会附加一个隐式的fade动画,有时候很讨厌,尤其是当你的cell是复合cell的情况下(比如cell使用到了UIStackView)。 |
下面几种方法都可以帮你去除这些动画
1 | //方法一 |
让Xcode的控制台支持LLDB类型的打印
1 | 打开终端输入三条命令: |
CocoaPods pod install/pod update更新慢的问题
1 | pod install --verbose --no-repo-update |
如果不加后面的参数,默认会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少
UIImage 占用内存大小
1 | UIImage *image = [UIImage imageNamed:@"aa"]; |
GCD timer定时器
1 | dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); |
图片上绘制文字 写一个UIImage的category
1 | - (UIImage *)imageWithTitle:(NSString *)title fontSize:(CGFloat)fontSize |
查找一个视图的所有子视图
1 | - (NSMutableArray *)allSubViewsForView:(UIView *)view |
计算文件大小
1 | //文件大小 |
UIView设置部分圆角
你是不是也遇到过这样的问题,一个button或者label,只要右边的两个角圆角,或者只要一个圆角。该怎么办呢。这就需要图层蒙版来帮助我们了
1 | CGRect rect = view.bounds; |
取上整与取下整
1 | floor(x),有时候也写做Floor(x),其功能是“下取整”,即取不大于x的最大整数 例如: |
计算字符串字符长度,一个汉字算两个字符
1 | //方法一: |
给UIView设置图片
1 | UIImage *image = [UIImage imageNamed:@"image"]; |
防止scrollView手势覆盖侧滑手势
1 | [scrollView.panGestureRecognizerrequireGestureRecognizerToFail:self.navigationController.interactivePopGestureRecognizer]; |
去掉导航栏返回的back标题
1 | [[UIBarButtonItemappearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)forBarMetrics:UIBarMetricsDefault]; |
字符串中是否含有中文
1 | + (BOOL)checkIsChinese:(NSString *)string |
dispatch_group的使用
1 | dispatch_group_t dispatchGroup = dispatch_group_create(); |
UITextField每四位加一个空格,实现代理
1 | - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string |
获取私有属性和成员变量 #import
1 | //获取私有属性 比如设置UIDatePicker的字体颜色 |
获取手机安装的应用
1 | Class c =NSClassFromString(@"LSApplicationWorkspace"); |
判断两个日期是否在同一周 写在NSDate的category里面
1 | - (BOOL)isSameDateWithDate:(NSDate *)date |
应用内打开系统设置界面
1 | //iOS8之后 |
可选值如下:
1 | About — prefs:root=General&path=About |
屏蔽触发事件,2秒后取消屏蔽
1 | [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; |
动画暂停再开始
1 | -(void)pauseLayer:(CALayer *)layer |
iOS中数字的格式化
1 | //通过NSNumberFormatter,同样可以设置NSNumber输出的格式。例如如下代码: |
如何获取WebView所有的图片地址,
在网页加载完成时,通过js获取图片和添加点击的识别方式
1 | //UIWebView |
获取到webview的高度
1 | CGFloat height = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]; |
navigationBar变为纯透明
1 | //第一种方法 |
tabBar同理
1 | [self.tabBar setBackgroundImage:[UIImage new]]; |
navigationBar根据滑动距离的渐变色实现
1 | //第一种 |
iOS 开发中一些相关的路径
1 | 模拟器的位置: |
navigationItem的BarButtonItem如何紧靠屏幕右边界或者左边界?
一般情况下,右边的item会和屏幕右侧保持一段距离: 下面是通过添加一个负值宽度的固定间距的item来解决,也可以改变宽度实现不同的间隔:
1 | UIImage *img = [[UIImage imageNamed:@"icon_cog"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; |
NSString进行URL编码和解码
1 | NSString *string = @"http://abc.com?aaa=你好&bbb=tttee"; |
UIWebView设置User-Agent。
1 | //设置 |
获取硬盘总容量与可用容量:
1 | NSFileManager *fileManager = [NSFileManager defaultManager]; |
获取UIColor的RGBA值
1 | UIColor *color = [UIColor colorWithRed:0.2 green:0.3 blue:0.9 alpha:1.0]; |
修改textField的placeholder的字体颜色、大小
1 | [self.textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"]; |
AFN移除JSON中的NSNull
1 | AFJSONResponseSerializer *response = [AFJSONResponseSerializer serializer]; |
ceil()和floor()
1 | ceil()功 能:返回大于或者等于指定表达式的最小整数 |
在webView加载完的代理方法里面这样写:
1 | - (void)webViewDidFinishLoad:(UIWebView *)webView |
NSDateFormat最佳方式(strptime)
1 | + (NSDate *)dateFromISO8601StringDateFormatter:(NSString *)string locale:(NSLocale *)locale{ |
毛玻璃
1 | //创建 |
tableview下拉刷新停留(不滚到顶部), 类似QQ,微信拉去历史消息
关于TableView代理方法和其他一些数据与逻辑处理和平时一样,只是在下啦的时候啦到的数据,放到最前面,同事控制TableView的偏移。
1 | self.oldSize = self.tableView.contentSize; |
KeyChain隐私信息存储(主要是密码类)
集成NSObject
1 | -(NSMutableDictionary *)getKeychainQuery:(NSString *)service |
自定义圆角裁剪:搞性能
1 | // ------------------------------------------------------------------ |
隐藏tabbar上面的虚线
1 | //隐藏阴影线 |
隐藏导航栏下面的虚线
#方法一,世界使用背景图片与阴影
1 | - (void)viewWillAppear:(BOOL)animated{ |
这是唯一一个隐藏这条线的官方用法,但是有一个缺陷-删除了translucency(半透明)
#方法二:
1)声明UIImageView变量,存储底部横线
1 | @interface MyViewController { |
2)在viewDidLoad中加入:
1 | navBarHairlineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar]; |
3)实现找出底部横线的函数
1 | - (UIImageView *)findHairlineImageViewUnder:(UIView *)view { |
4)最后在viewWillAppear,viewWillDisappear中处理
1 | - (void)viewWillAppear:(BOOL)animated { |
###两个范围的富文本
1 | NSString *times = [NSString stringWithFormat:@"哇塞!本次视频聊天%@", [info objectStringForKey:@"times"]]; |
修改UIAlertController
1 | // 在 viewDidLoad 中创建 |
// [alertVC setValue:AttributedTit forKey:@“attributedTitle”]; [alertVC setValue:AttributedStr forKey:@“attributedMessage”];
1 | //修改按钮的颜色,同上可以使用同样的方法修改内容,样式 |
上面使用了一种个人比较喜欢的方法,
总体来说,第二种办法还是很好地,建议大家使用第二种办法。