iOS
po [[self view]recursiveDescription]
layoutSubviews调用的调用时机当视图第一次显示的时候会被调用当这个视图显示到屏幕上了,点击按钮添加子视图也会调用这个方法当本视图的大小发生改变的时候是会调用的当子视图的frame发生改变的时候是会调用的当删除子视图的时候是会调用的
NSString过滤特殊字符// 定义一个特殊字符的集合NSCharacterSet *set=[NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$^?'@#$%^&*()_+'\""];// 过滤字符串的特殊字符NSString *newString=[trimString stringByTrimmingCharactersInSet:set];
TransForm属性//平移按钮CGAffineTransform transForm=self.buttonView.transform;self.buttonView.transform=CGAffineTransformTranslate(transForm, 10, 0);//旋转按钮CGAffineTransform transForm=self.buttonView.transform;self.buttonView.transform=CGAffineTransformRotate(transForm, M_PI_4);//缩放按钮self.buttonView.transform=CGAffineTransformScale(transForm, 1.2, 1.2);//初始化复位self.buttonView.transform=CGAffineTransformIdentity;
去掉分割线多余15像素//首先在viewDidLoad方法加入以下代码: if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) { [self.tableView setLayoutMargins:UIEdgeInsetsZero];}//然后在重写willDisplayCell方法 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; }}
计算方法耗时时间间隔// 获取时间间隔#define TICK CFAbsoluteTime start=CFAbsoluteTimeGetCurrent();#define TOCK NSLog(@"Time: %f", CFAbsoluteTimeGetCurrent() - start)
Color颜色宏定义// 随机颜色#define RANDOM_COLOR [UIColor colorWithRed:arc4random_uniform(256) / 255.0 green:arc4random_uniform(256) / 255.0 blue:arc4random_uniform(256) / 255.0 alpha:1]// 颜色(RGB)#define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]// 利用这种方法设置颜色和透明值,可不影响子视图背景色#define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
Alert提示宏定义#define Alert(_S_, ...) [[[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:(_S_), ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil] show]
让iOS应用直接退出 - (void)exitApplication { AppDelegate *app=[UIApplication sharedApplication].delegate; UIWindow *window=app.window; [UIView animateWithDuration:1.0f animations:^{ window.alpha=0; } completion:^(BOOL finished) { exit(0); }];}
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);
修改Label中不同文字颜色 - (void)touchesEnded:(NSSet<UITouch> *)touches withEvent:(UIEvent *)event{ [self editStringColor:self.label.text editStr:@"好" color:[UIColor blueColor]];} - (void)editStringColor:(NSString *)string editStr:(NSString *)editStr color:(UIColor *)color { // string为整体字符串, editStr为需要修改的字符串 NSRange range=[string rangeOfString:editStr]; NSMutableAttributedString *attribute=[[NSMutableAttributedString alloc] initWithString:string]; // 设置属性修改字体颜色UIColor与大小UIFont [attribute addAttributes:@{NSForegroundColorAttributeName:color} range:range]; self.label.attributedText=attribute;}
播放声音 #import<AVFoundation> // 1.获取音效资源的路径 NSString *path=[[NSBundle mainBundle]pathForResource:@"pour_milk" ofType:@"wav"]; // 2.将路劲转化为url NSURL *tempUrl=[NSURL fileURLWithPath:path]; // 3.用转化成的url创建一个播放器 NSError *error=nil; AVAudioPlayer *play=[[AVAudioPlayer alloc]initWithContentsOfURL:tempUrl error:&error]; self.player=play; // 4.播放 [play play];
检测是否IPad Pro - (BOOL)isIpadPro{ UIScreen *Screen=[UIScreen mainScreen]; CGFloat width=Screen.nativeBounds.size.width/Screen.nativeScale; CGFloat height=Screen.nativeBounds.size.height/Screen.nativeScale; BOOL isIpad=[[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad; BOOL hasIPadProWidth=fabs(width - 1024.f) < DBL xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed xss=removed>> ~/.lldbinit echo target stop-hook add -o \"target stop-hook disable\" >> ~/.lldbinit//下次重新运行项目,然后就不报错了。
Label行间距 -(void)test{ NSMutableAttributedString *attributedString=[[NSMutableAttributedString alloc] initWithString:self.contentLabel.text]; NSMutableParagraphStyle *paragraphStyle=[[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:3]; //调整行间距 [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.contentLabel.text length])]; self.contentLabel.attributedText=attributedString;}
UIImageView填充模式@"UIViewContentModeScaleToFill", // 拉伸自适应填满整个视图 @"UIViewContentModeScaleAspectFit", // 自适应比例大小显示 @"UIViewContentModeScaleAspectFill", // 原始大小显示 @"UIViewContentModeRedraw", // 尺寸改变时重绘 @"UIViewContentModeCenter", // 中间 @"UIViewContentModeTop", // 顶部 @"UIViewContentModeBottom", // 底部 @"UIViewContentModeLeft", // 中间贴左 @"UIViewContentModeRight", // 中间贴右 @"UIViewContentModeTopLeft", // 贴左上 @"UIViewContentModeTopRight", // 贴右上 @"UIViewContentModeBottomLeft", // 贴左下 @"UIViewContentModeBottomRight", // 贴右下
宏定义检测block是否可用#define BLOCK_EXEC(block, ...) if (block) { block(__VA_ARGS__); }; // 宏定义之前的用法 if (completionBlock) { completionBlock(arg1, arg2); } // 宏定义之后的用法 BLOCK_EXEC(completionBlock, arg1, arg2);
Debug栏打印时自动把Unicode编码转化成汉字// 有时候我们在xcode中打印中文,会打印出Unicode编码,还需要自己去一些在线网站转换,有了插件就方便多了。 DXXcodeConsoleUnicodePlugin 插件
设置状态栏文字样式颜色[[UIApplication sharedApplication] setStatusBarHidden:NO];[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
自动生成模型代码的插件// 可自动生成模型的代码,省去写模型代码的时间ESJsonFormat-for-Xcode
iOS中的一些手势//轻击手势(TapGestureRecognizer)//轻扫手势(SwipeGestureRecognizer)//长按手势(LongPressGestureRecognizer)//拖动手势(PanGestureRecognizer)//捏合手势(PinchGestureRecognizer)//旋转手势(RotationGestureRecognizer)
iOS 开发中一些相关的路径//模拟器的位置:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs//文档安装位置:/Applications/Xcode.app/Contents/Developer/Documentation/DocSets//插件保存路径:~/Library/ApplicationSupport/Developer/Shared/Xcode/Plug-ins//自定义代码段的保存路径:~/Library/Developer/Xcode/UserData/CodeSnippets/ //如果找不到CodeSnippets文件夹,可以自己新建一个CodeSnippets文件夹。//证书路径~/Library/MobileDevice/Provisioning Profiles
获取 iOS 路径的方法//获取家目录路径的函数NSString *homeDir=NSHomeDirectory();//获取Documents目录路径的方法NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *docDir=[paths objectAtIndex:0];//获取Documents目录路径的方法NSArray *paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);NSString *cachesDir=[paths objectAtIndex:0];//获取tmp目录路径的方法:NSString *tmpDir=NSTemporaryDirectory();
字符串相关操作//去除所有的空格[str stringByReplacingOccurrencesOfString:@" " withString:@""]//去除首尾的空格[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; - (NSString *)uppercaseString;// 全部字符转为大写字母 - (NSString *)lowercaseString; //全部字符转为小写字母
CocoaPods pod install/pod update更新慢的问题pod install --verbose --no-repo-update pod update --verbose --no-repo-update//如果不加后面的参数,默认会升级CocoaPods的spec仓库,加一个参数可以省略这一步,然后速度就会提升不少。
MRC和ARC混编设置方式//在XCode中targets的build phases选项下Compile Sources下选择 不需要arc编译的文件//双击输入 -fno-objc-arc 即可//MRC工程中也可以使用ARC的类,方法如下://在XCode中targets的build phases选项下Compile Sources下选择要使用arc编译的文件//双击输入 -fobjc-arc 即可
把tableview里cell的小对勾的颜色改成别的颜色_mTableView.tintColor=[UIColor redColor];
调整tableview的separaLine线的位置tableView.separatorInset=UIEdgeInsetsMake(0, 100, 0, 0);
设置滑动的时候隐藏navigation barnavigationController.hidesBarsOnSwipe=Yes;
自动处理键盘事件,实现输入框防遮挡的插件IQKeyboardManagerhttps://github.com/hackiftekhar/IQKeyboardManager
Quartz2D相关//图形上下是一个CGContextRef类型的数据。//图形上下文包含://1,绘图路径(各种各样图形)//2,绘图状态(颜色,线宽,样式,旋转,缩放,平移)//3,输出目标(绘制到什么地方去?UIView、图片)//1,获取当前图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//2,添加线条CGContextMoveToPoint(ctx, 20, 20);//3,渲染CGContextStrokePath(ctx);CGContextFillPath(ctx);//4,关闭路径CGContextClosePath(ctx);//5,画矩形CGContextAddRect(ctx, CGRectMake(20, 20, 100, 120));//6,设置线条颜色[[UIColor redColor] setStroke];//7, 设置线条宽度CGContextSetLineWidth(ctx, 20);//8,设置头尾样式CGContextSetLineCap(ctx, kCGLineCapSquare);//9,设置转折点样式CGContextSetLineJoin(ctx, kCGLineJoinBevel);//10,画圆CGContextAddEllipseInRect(ctx, CGRectMake(30, 50, 100, 100));//11,指定圆心CGContextAddArc(ctx, 100, 100, 50, 0, M_PI * 2, 1);//12,获取图片上下文UIGraphicsGetImageFromCurrentImageContext();//13,保存图形上下文CGContextSaveGState(ctx)//14,恢复图形上下文CGContextRestoreGState(cox)
屏幕截图 // 1. 开启一个与图片相关的图形上下文 UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,NO,0.0); // 2. 获取当前图形上下文 CGContextRef ctx=UIGraphicsGetCurrentContext(); // 3. 获取需要截取的view的layer [self.view.layer renderInContext:ctx]; // 4. 从当前上下文中获取图片 UIImage *image=UIGraphicsGetImageFromCurrentImageContext(); // 5. 关闭图形上下文 UIGraphicsEndImageContext(); // 6. 把图片保存到相册 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
隐藏导航栏上的返回字体//SwiftUIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics: .Default)//OC[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
解决tableview的分割线短一截 -(void)viewDidLayoutSubviews{if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]){ [self.tableView setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];}if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {[self.tableView setLayoutMargins:UIEdgeInsetsMake(0,0,0,0)]; }} -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {[cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {[cell setLayoutMargins:UIEdgeInsetsZero]; }}
动态隐藏NavigationBar//1.当我们的手离开屏幕时候隐藏 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{ if(velocity.y > 0) {[self.navigationController setNavigationBarHidden:YES animated:YES];} else {[self.navigationController setNavigationBarHidden:NO animated:YES]; }}//velocity.y这个量,在上滑和下滑时,变化极小(小数),但是因为方向不同,有正负之分,这就很好处理了。//2.在滑动过程中隐藏//像safari//(1) self.navigationController.hidesBarsOnSwipe=YES;//(2) - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat offsetY=scrollView.contentOffset.y + __tableView.contentInset.top; CGFloat panTranslationY=[scrollView.panGestureRecognizer translationInView:self.tableView].y; if (offsetY > 64) { if (panTranslationY > 0) { //下滑趋势,显示 [self.navigationController setNavigationBarHidden:NO animated:YES];} else { //上滑趋势,隐藏 [self.navigationController setNavigationBarHidden:YES animated:YES]; }} else {[self.navigationController setNavigationBarHidden:NO animated:YES]; }}//这里的offsetY > 64只是为了在视图滑过navigationBar的高度之后才开始处理,防止影响展示效果。panTranslationY是scrollView的pan手势的手指位置的y值,可能不是太好,因为panTranslationY这个值在较小幅度上下滑动时,可能都为正或都为负,这就使得这一方式不太灵敏.效果图
设置导航栏透明//方法一:设置透明度[[[self.navigationController.navigationBar subviews]objectAtIndex:0] setAlpha:0.1];//方法二:设置背景图片/** * 设置导航栏,使其透明 **/ - (void)setNavigationBarColor:(UIColor *)color targetController:(UIViewController *)targetViewController{//导航条的颜色 以及隐藏导航条的颜色targetViewController.navigationController.navigationBar.shadowImage=[[UIImage alloc]init]; 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(); [targetViewController.navigationController.navigationBar setBackgroundImage:theImage forBarMetrics:UIBarMetricsDefault];}```47. 设置字体和行间距
//设置字体和行间距UILabel * lable=[[UILabel alloc]initWithFrame:CGRectMake(50, 100, 300, 200)];lable.text=@"大家好,我是Frank_chun,在这里我们一起学习新的知识,总结我们遇到的那些坑,共同的学习,共同的进步,共同的努力,只为美好的明天!!!有问题一起相互的探讨--438637472!!!";lable.numberOfLines=0;lable.font=[UIFont systemFontOfSize:12];lable.backgroundColor=[UIColor grayColor];[self.view addSubview:lable];//设置每个字体之间的间距//NSKernAttributeName 这个对象所对应的值是一个NSNumber对象(包含小数),作用是修改默认字体之间的距离调整,值为0的话表示字距调整是禁用的; NSMutableAttributedString * str=[[NSMutableAttributedString alloc]initWithString:lable.text attributes:@{NSKernAttributeName:@(5.0)}];//设置某写字体的颜色//NSForegroundColorAttributeName 设置字体颜色NSRange blueRange=NSMakeRange([[str string] rangeOfString:@"Frank_chun"].location, [[str string] rangeOfString:@"Frank_chun"].length);[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:blueRange];NSRange blueRange1=NSMakeRange([[str string] rangeOfString:@"438637472"].location, [[str string] rangeOfString:@"438637472"].length);[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:blueRange1];//设置每行之间的间距//NSParagraphStyleAttributeName 设置段落的样式NSMutableParagraphStyle * par=[[NSMutableParagraphStyle alloc]init];[par setLineSpacing:20];//为某一范围内文字添加某个属性//NSMakeRange表示所要的范围,从0到整个文本的长度[str addAttribute:NSParagraphStyleAttributeName value:par range:NSMakeRange(0, lable.text.length)]; [lable setAttributedText:str];效果图
48. 点击button倒计时
//第一种方法//点击button倒计时
import "ViewController.h"@interface ViewController ()@property (nonatomic, strong) UIButton * timeButton;@property (nonatomic, strong) NSTimer * timer;@property (nonatomic, strong)UIButton * btn;@end@implementation ViewController{NSInteger _time;}
(void)viewDidLoad {[super viewDidLoad];_time=5;self.btn=[UIButton buttonWithType:UIButtonTypeCustom]; _btn.backgroundColor=[UIColor orangeColor];[_btn setTitle:@"获取验证码" forState:UIControlStateNormal]; _btn.titleLabel.font=[UIFont systemFontOfSize:15];[_timeButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];[_btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];[self refreshButtonWidth];[self.view addSubview:self.btn];}(void)refreshButtonWidth{CGFloat width=0;if (_btn.enabled){width=100;} else {width=200;}_btn.center=CGPointMake(self.view.frame.size.width/2, 200);_btn.bounds=CGRectMake(0, 0, width, 40);//每次刷新,保证区域正确[_btn setBackgroundImage:[self imageWithColor:[UIColor orangeColor] andSize:_btn.frame.size] forState:UIControlStateNormal];[_btn setBackgroundImage:[self imageWithColor:[UIColor lightGrayColor] andSize:_btn.frame.size] forState:UIControlStateDisabled];}(UIImage *)imageWithColor:(UIColor *)color andSize:(CGSize)aSize{CGRect rect=CGRectMake(0.0f, 0.0f, aSize.width, aSize.height); UIGraphicsBeginImageContext(rect.size);CGContextRef context=UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect);UIImage *image=UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();return image;}(void)btnAction:(UIButton *)sender{sender.enabled=NO;[self refreshButtonWidth];[sender setTitle:[NSString stringWithFormat:@"获取验证码(%zi)", _time] forState:UIControlStateNormal];_timer=[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timeDown) userInfo:nil repeats:YES];}(void)timeDown{_time --;if (_time==0) {[_btn setTitle:@"重新获取" forState:UIControlStateNormal]; _btn.enabled=YES;[self refreshButtonWidth];[_timer invalidate];_timer=nil;_time=5 ;return;}[_btn setTitle:[NSString stringWithFormat:@"获取验证码(%zi)", _time] forState:UIControlStateNormal];}//第二种方法pragma mark -点击发送验证码(void)sendMessage:(UIButton )btn{if (self.phoneField.text.length==0) {[self remindMessage:@"请输入正确的手机号"];}else{__block int timeout=60;//倒计时时间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.0NSEC_PER_SEC, 0);//每秒执行dispatch_source_set_event_handler(_timer, ^{if(timeout<=0){//倒计时结束,关闭dispatch_source_cancel(_timer); dispatch_async(dispatch_get_main_queue(), ^{// 设置界面的按钮显示 根据自己需求设置[btn setTitle:@"发送验证码" forState:UIControlStateNormal]; btn.userInteractionEnabled=YES;});}else{int seconds=timeout % 60;NSString *strTime=[NSString stringWithFormat:@"%d", seconds];if ([strTime isEqualToString:@"0"]) {strTime=[NSString stringWithFormat:@"%d",60];}dispatch_async(dispatch_get_main_queue(), ^{//设置界面的按钮显示 根据自己需求设置//NSLog(@"____%@",strTime);[UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:1];[btn setTitle:[NSString stringWithFormat:@"%@秒后重新发送",strTime] forState:UIControlStateNormal];[UIView commitAnimations];btn.userInteractionEnabled=NO;});timeout--;}});dispatch_resume(_timer);}49. UITextField默认占位符是居中显示,让其居上显示
textField.contentVerticalAlignment=UIControlContentVerticalAlignmentTop;
50. 解决同时按两个按钮进两个view的问题
[button setExclusiveTouch:YES];
51. 图片拉伸
UIImage* img=[UIImage imageNamed:@"2.png"];//原图UIEdgeInsets edge=UIEdgeInsetsMake(0, 10, 0,10);//UIImageResizingModeStretch:拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片//UIImageResizingModeTile:平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图img=[img resizableImageWithCapInsets:edge resizingMode:UIImageResizingModeStretch];self.imageView.image=img;
52. 修改textFieldplaceholder字体颜色和大小
textField.placeholder=@"username is in here!";[textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];[textField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:@"_placeholderLabel.font"];
53. 修改状态栏字体颜色
//只能设置两种颜色,黑色和白色,系统默认黑色//设置为白色方法:(//1)在plist里面添加Status bar style,值为UIStatusBarStyleLightContent(白色)或UIStatusBarStyleDefault(黑 色)//(2)在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO
54. 去掉导航栏下边的黑线
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];self.navigationController.navigationBar.shadowImage=[[UIImage alloc] init];
55. 修改pagecontrol颜色
_pageControl.currentPageIndicatorTintColor=SFQRedColor;_pageControl.pageIndicatorTintColor=SFQGrayColor;
56. 去掉UITableView的section的粘性,使其不会悬停
//有时候使用UITableView所实现的列表,会使用到section,但是又不希望它粘在最顶上而是跟随滚动而消失或者出现
(void)scrollViewDidScroll:(UIScrollView *)scrollView {if (scrollView==_tableView) {CGFloat sectionHeaderHeight=36;if (scrollView.contentOffset.y <=sectionHeaderHeight && scrollView.contentOffset.y >=0) {scrollView.contentInset=UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);} else if (scrollView.contentOffset.y >=sectionHeaderHeight) {scrollView.contentInset=UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);}}}57. 通过2D仿射函数实现小的动画效果(变大缩小) --可用于自定义pageControl中
[UIView animateWithDuration:0.3 animations:^{imageView.transform=CGAffineTransformMakeScale(2, 2);} completion:^(BOOL finished) {imageView.transform=CGAffineTransformMakeScale(1.0, 1.0);}];
58. UIImage与字符串互转
//图片转字符串-(NSString *)UIImageToBase64Str:(UIImage *) image{NSData *data=UIImageJPEGRepresentation(image, 1.0f);NSString *encodedImageStr=[data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];return encodedImageStr;}//字符串转图片-(UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr{NSData *_decodedImageData=[[NSData alloc] initWithBase64Encoding:_encodedImageStr];UIImage *_decodedImage=[UIImage imageWithData:_decodedImageData];return _decodedImage;}
59. 判断NSString中是否包含中文
-(BOOL)isChinese:(NSString *)str{NSString *match=@"(^[\u4e00-\u9fa5]+$)";NSPredicate *predicate=[NSPredicate predicateWithFormat:@"SELF matches %@", match];return [predicate evaluateWithObject:str];}```
NSDate与NSString的相互转化 -(NSString *)dateToString:(NSDate *)date { // 初始化时间格式控制器 NSDateFormatter *matter=[[NSDateFormatter alloc] init]; // 设置设计格式 [matter setDateFormat:@"yyyy-MM-dd hh:mm:ss zzz"]; // 进行转换 NSString *dateStr=[matter stringFromDate:date]; return dateStr;}-(NSDate *)stringToDate:(NSString *)dateStr { // 初始化时间格式控制器 NSDateFormatter *matter=[[NSDateFormatter alloc] init]; // 设置设计格式 [matter setDateFormat:@"yyyy-MM-dd hh:mm:ss zzz"]; // 进行转换 NSDate *date=[matter dateFromString:dateStr]; return date;}```转到哪里我忘了,在这里记录下。
分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园!
生活中有很多朋友都在用iPhone,那么今天给大家分享,8个超实用的iPhone隐藏功能和技巧,你可能还不知道,下面一起来看看吧。
一、自定义控制中心
iPhone的控制中心,可以完成很多快捷操作,打开「设置」-「控制中心」-「自定控制」,将一些常用的功能添加上去,比如手电筒、屏幕录制、闹钟、计时器等等。
控制中心里面的功能,长按还会有隐藏属性:
长按手电筒调节亮度;长按计时器启动倒计时;长按计算器复制上一个结果;长按亮度条设置夜览和深色模式。二、启用科学计算器
使用iPhone计算器,用手指在数字上左右滑动,可以逐个删除;解锁方向键后,将手机横过来,你会得到一个科学计算器,括号、根号、平方、立方、三角函数等都能使用 。
三、轻点背面截屏
如果你的iPhone升级到了iOS 14,教你一种更加高级的截屏方式!打开「设置」-「通用」-「辅助功能」-「触控」-「轻点背面」-「轻点两下」-「截屏」。
以后需要截屏,直接用手指在手机背面双击即可。因为之前这个功能很容易误触,经过几次系统更新后,误触问题也已经解决了,可以放心使用。
四、扫描打印文稿
Phone备忘录一直隐藏着扫描仪,很多人还不会用,先打开备忘录新建笔记,然后点击键盘上方的照相机图标,底部会出现3个选项,选择「扫描文稿」功能。
我们可以用来扫描纸质文稿,它能自动识别,并直接保存到备忘录笔记中;这比用相机拍照更加清晰,因为扫描出来是PDF文稿,还可以打印出来。
不过很可惜的是,无法将文稿内容提取出来,所以我平时用「迅捷文字识别」,只需拍一拍就能快速识别,支持图文校对、文稿翻译。
五、开启游戏模式
我们在玩游戏的时候,最讨厌来电话和消息,其实iPhone隐藏着非常好用的“游戏模式”。打开手机的「设置」-「辅助功能」-「引导式访问」,开启这个功能。
以后我们玩游戏的时候,直接启用引导式访问,点击右上角的「开始」,即可锁定当前应用,任何消息通知,都不会干扰到你。
全面屏iPhone开启方式:连续按3次锁屏键;非全面屏iPhone开启方式:连续按3次Home键。六、浏览器截长图
很多人都说苹果手机不能长截图,今天我就来教你!在Safari浏览器中截取一张图片,左下角可以预览图片,然后点击「整页」,就可以将整个页面都截下来了。
七、相机锁定对焦
我们平常拍照录像的时候,稍微动一下镜头,焦点就偏移了,这是因为苹果相机默认自动对焦。你可以长按一个焦点,就能锁定自动对焦,无论怎么移动相机都不会变焦。
八、录屏还能录音
我们平时录屏都是打开控制中心,直接点击录屏按钮,这样录制系统声音;你可以长按2秒录屏按钮,将会打开新的面板,开启底部的麦克风按钮,就能录制外部声音了。
写在后面:
今天这8个超实用的iPhone隐藏功能和技巧,现在大家都知道了吧,觉得不错的话可以分享出去,这样能够帮助到更多的人。
发表评论